level 6
lbj2004032
楼主
现在又一个list 每当有对象加入list.add()的时候由多线程去监听执行某些事
1.while(true)形式的监听,浪费资源,
Queue list = new LinkedBlockingQueue();
while(true){
try{
Thread.sleep(1000);//一秒钟查看一次
if(!list.isEmpty()){
System.out.println("do something");
}
}catch(Exception e){
// ...
}
}
2.阻塞形式
public class Listener{
private Object wait_object = new Object();
Queue list = new LinkedBlockingQueue();
private Runnable run = new Runnable(){
public void run(){
while(!list.isEmpty()){
System.out.println("do something");
}
synchronized(wait_object){
System.out.println("睡着。。。");
wait_object.wait();
wait_object.wait("醒来。。。");
}
}
};
public void wakeUp(){
list.add("object");
synchronized(wait_object){
wait_object.notifyAll();
}
}
public void start(){
new Thread(run).start();
}
}
当发生list.add()时候,调用Listener的wakeUp();
例如
public class TestMain{
Listener listen = new Listener();
listen.start();
Thread.sleep(5000);//5秒后唤醒
listen.wakeUp();
}
2010年07月06日 09点07分
1
1.while(true)形式的监听,浪费资源,
Queue list = new LinkedBlockingQueue();
while(true){
try{
Thread.sleep(1000);//一秒钟查看一次
if(!list.isEmpty()){
System.out.println("do something");
}
}catch(Exception e){
// ...
}
}
2.阻塞形式
public class Listener{
private Object wait_object = new Object();
Queue list = new LinkedBlockingQueue();
private Runnable run = new Runnable(){
public void run(){
while(!list.isEmpty()){
System.out.println("do something");
}
synchronized(wait_object){
System.out.println("睡着。。。");
wait_object.wait();
wait_object.wait("醒来。。。");
}
}
};
public void wakeUp(){
list.add("object");
synchronized(wait_object){
wait_object.notifyAll();
}
}
public void start(){
new Thread(run).start();
}
}
当发生list.add()时候,调用Listener的wakeUp();
例如
public class TestMain{
Listener listen = new Listener();
listen.start();
Thread.sleep(5000);//5秒后唤醒
listen.wakeUp();
}