黑马程序员技术交流社区
标题:
有关Java线程wait后唤醒的问题
[打印本页]
作者:
雷丹
时间:
2013-10-24 12:29
标题:
有关Java线程wait后唤醒的问题
package edu.cczu.mythread1;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class Commnicate extends JFrame{
Thread t1;
Thread t2;
private int count=0;
final JProgressBar progressBar = new JProgressBar();
public static void main(String[] args) {
init(new Commnicate(),150,100);
}
public Commnicate() {
super();
progressBar.setStringPainted(true);
getContentPane().add(progressBar, BorderLayout.NORTH);
deValue();
addValue();
t1.start();
t2.start();
}
public void addValue(){
t1=new Thread(new Runnable(){
public void run(){
try{
Thread.currentThread().sleep(10000);
System.out.println("线程退出");
}catch(Exception e){
e.printStackTrace();
}
}
});
}
public void deValue(){
t2=new Thread(new Runnable(){
public void run(){
while (true) {
if(count==0){
synchronized (t1) {
try {
System.out.println("t2等待");
t1.wait(); //这里应该等待,为什么t1结束后就被唤醒了?
System.out.println("t2等待结束");
count = 10;
} catch (Exception e) {
e.printStackTrace();
}
}
}
progressBar.setValue(--count);
System.out.println("进度条的当前值为:" + count);
}
}
});
}
public static void init(JFrame frame,int width,int height){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
}
}
t1.wait(); //这里应该等待,为什么t1结束后就被唤醒了?
当然只是执行了一次,第二次就停在那儿了。
作者:
漫步人
时间:
2013-10-24 13:35
t1.wait(); //这里应该等待,为什么t1结束后就被唤醒了?
当线程中没有可运行的程序是wait,不同于sleep,会被唤醒,而唤醒,是有程序的优先级来规定的,有时候和内存有关系,
sleep(10000),必须等到10s以后才运行,不会提前被唤醒!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2