JAVA编程 你不是给他Thread.sleep(5000)了么。第一次运行了,后面的没有运行! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议楼主在构造方法里把两个线程输出来,在run方法里把当前线程输出来,把flag也输出来。多运行几次,对照逻辑仔细分析,就会明白了。 最开始执行的构造方法。然后是下面代码的执行顺序:public synchronized void run() { while (abc) { //abc是true,执行 Thread thread = Thread.currentThread(); if (thread == PrintTime) { //你的情况是thread == PrintTime,执行 while (flag == 1) { //第一次flag=0,不执行 try { wait(); } catch (InterruptedException e) { }// ; } System.out.println(matter1.format(nowtime)); //最先输出这句 count++; flag = 1; try { System.out.println("我去休息啦"); //然后输出这句 Thread.sleep(5000); //睡眠,就是你觉得等待时间很长的原因 } catch (InterruptedException e) { System.out.println("被吵醒了"); } } if (thread == Supervisor) { //当你等待很长时间后会逐步执行到这句 while (flag == 0) { try { wait(); } catch (InterruptedException e) { } ; } System.out.println("不要休息,继续"); PrintTime.interrupt(); //这句会造成sleep异常,也就是为什么以后不会等待那么长时间的原因 flag = 0; } notify(); } } 为什么我第一次不会打断线程的睡眠,不是用了interruped函数吗 还有啊,第一个线程睡眠不是让出CPU了吗,怎么会隔很久才输出第二个线程的东西,应该立马执行第二个线程的东西啊 楼主说的第一次不被打断,是因为第一次的运行状态是,PrintTime这个线程先拿到同步锁,运行run里面的代码,而另一个线程Supervisor只能等待。 第一个线程运行时,flag为0 ,所以不会执行wait()语句,而执行后边的休眠语句,在执行休眠语句时。因为没有执行wait()语句,所以这个线程不会释放同步锁。自然第二个线程没有机会运行,中断那条语句自然执行不到。必须等到休眠结束后边代码执行完,释放线程锁。 关于java中的闭包和回调的问题 Java应该如何深入 如何控制线程 问个关于resultset的问题 请教高手swing 中表单验证如何实现! 请教将Java从数据库是查到的结果集ResultSet转换成xml文件,如何做到呢,请指教,谢谢 关于Class 关于动态绑定与上溯的问题,在线等候 JBuilder6中的Application问题? 请教高手如何释放内存 用Editplus编译包下面的Java文件 java构造函数的问题!!跪求大神
public synchronized void run() {
while (abc) { //abc是true,执行
Thread thread = Thread.currentThread();
if (thread == PrintTime) { //你的情况是thread == PrintTime,执行
while (flag == 1) { //第一次flag=0,不执行
try {
wait();
} catch (InterruptedException e) {
}
// ;
} System.out.println(matter1.format(nowtime)); //最先输出这句
count++;
flag = 1;
try {
System.out.println("我去休息啦"); //然后输出这句
Thread.sleep(5000); //睡眠,就是你觉得等待时间很长的原因
} catch (InterruptedException e) {
System.out.println("被吵醒了");
}
}
if (thread == Supervisor) { //当你等待很长时间后会逐步执行到这句
while (flag == 0) {
try {
wait();
} catch (InterruptedException e) {
}
;
}
System.out.println("不要休息,继续");
PrintTime.interrupt(); //这句会造成sleep异常,也就是为什么以后不会等待那么长时间的原因
flag = 0;
}
notify();
}
}
第一个线程运行时,flag为0 ,所以不会执行wait()语句,而执行后边的休眠语句,在执行休眠语句时。因为没有执行wait()语句,所以这个线程不会释放同步锁。自然第二个线程没有机会运行,中断那条语句自然执行不到。必须等到休眠结束后边代码执行完,释放线程锁。