返回信息流死循环:
while(true){
System.out.print("XXX");
}
运行的时候,为什么不执行输出语句呢?
----
多线程计时:
main(){
getStartTime() ;
Thread t1,t2,t3...start(); //多线程运行
endTime-startTime;
}
如何在不影响多线程并行执行的情况下,让main函数的主线程最后结束,计算中间运行时间。
这是一条镜像帖。来源:北邮人论坛 / java / #23444同步于 2012/9/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问]死循环 & 多线程计时
NagatoYuki
2012/9/12镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
【 在 wks 的大作中提到: 】
: 1. 和缓冲有关。
: 2.
: [code=java]
: ...................
第二个会不会是串行执行了
执行是并行的,等待是串行的。但是,既然要等到所有的线程结束,以什么顺序等待又有什么关系呢?
【 在 Neuron 的大作中提到: 】
: 第二个会不会是串行执行了
【 在 wks 的大作中提到: 】
: 执行是并行的,等待是串行的。但是,既然要等到所有的线程结束,以什么顺序等待又有什么关系呢?
:
我不清楚java的多线程机制,但是这个代码如果放在c 的pthread的话,是串行执行,就是启动一个线程,等待这个线程结束后,才再启动第二个线程,再等待第二线程结束……
所以我很好奇这段代码在java是不是并行的
想象一下,如果没有这些join,那么那些线程就应该并发执行吧?
那么在所有的线程都start了,但是main线程还没有开始join的这个缝隙中,其它线程是不是并发执行的呢?想象在这个for(...){t.join}之前还有个Thread.sleep(10000),这段时间是不是并发的呢?
所以添加一段join不可能让本来该并行的变成串行。
【 在 Neuron 的大作中提到: 】
: 我不清楚java的多线程机制,但是这个代码如果放在c 的pthread的话,是串行执行,就是启动一个线程,等待这个线程结束后,才再启动第二个线程,再等待第二线程结束……
: 所以我很好奇这段代码在java是不是并行的
【 在 wks 的大作中提到: 】
: 想象一下,如果没有这些join,那么那些线程就应该并发执行吧?
: 那么在所有的线程都start了,但是main线程还没有开始join的这个缝隙中,其它线程是不是并发执行的呢?想象在这个for(...){t.join}之前还有个Thread.sleep(10000),这段时间是不是并发的呢?
: 所以添加一段join不可能让本来该并行的变成串行。
: ...................
for代码那段是不是先执行new一个线程,然后执行代码块中的t.join()
t.join()在java里,有没有阻塞功能
还是说你给的那段代码里,for语句会先把所有的线程都new起来,然后再挨个执行t.join()
package com.github.wks.javajunks;
public class ThreadsTest {
private static class Printer implements Runnable {
private int i;
public Printer(int i) {
this.i = i;
}
@Override
public void run() {
System.out.println(i);
}
}
public static void main(String[] args) throws InterruptedException {
Thread[] ts = new Thread[10];
for (int i = 0; i < 10; i++) {
ts[i] = new Thread(new Printer(i));
}
System.out.println("Starting...");
for (Thread t : ts) {
t.start();
}
System.out.println("All started. Joining...");
for (Thread t : ts) {
t.join();
}
System.out.println("Main end.");
}
}
【 在 Neuron 的大作中提到: 】
: for代码那段是不是先执行new一个线程,然后执行代码块中的t.join()
: t.join()在java里,有没有阻塞功能
: 还是说你给的那段代码里,for语句会先把所有的线程都new起来,然后再挨个执行t.join()
第二题的标准答案是锁存器CountDownLatch吧
main(){
getStartTime() ;
CountDownLatch cdl=new CountDownLatch(n)//n个线程的
Thread t1,t2,t3...start(); //多线程运行,其中每个run最后一句调用cdl.countDown();
cdl.await();//主线程在这行阻塞,直到所有线程结束。
endTime-startTime;
}