前言:
今天大家对“java线程的notify”大约比较看重,姐妹们都需要了解一些“java线程的notify”的相关知识。那么小编同时在网络上网罗了一些关于“java线程的notify””的相关资讯,希望看官们能喜欢,朋友们快快来了解一下吧!首先: 对象锁wait()释放锁,notify()不释放锁
测试源码如下,运行结果解析如截图,可自行运行测试,下一篇文章我们来讲java.util.concurrent包下的 CountDownLatch如何来进行改造该程序使之在t1通知t2后,
t2线程会立即执行
import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;/** * @author zz * */public class ListAdd2 { private volatile static List list = new ArrayList(); public void add(){ list.add("bjsxt"); } public int size(){ return list.size(); } public static void main(String[] args) { final ListAdd2 list2 = new ListAdd2(); //对象锁 final Object lock = new Object(); Thread t1 = new Thread(new Runnable() { @Override public void run() { try { synchronized (lock) { System.out.println("t1启动.."); for(int i = 0; i <10; i++){ list2.add(); System.out.println("当前线程:" + Thread.currentThread().getName() + "添加了一个元素.."); Thread.sleep(500); if(list2.size() == 5){ System.out.println("已经发出通知.."); lock.notify(); } } } } catch (InterruptedException e) { e.printStackTrace(); } } }, "t1"); Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized (lock) { System.out.println("t2启动.."); if(list2.size() != 5){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("当前线程:" + Thread.currentThread().getName() + "收到通知线程停止.."); throw new RuntimeException(); } } }, "t2"); t2.start(); t1.start(); } }
执行结果:
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java线程的notify