龙空技术网

Java并发编程之线程之间的通信(wait和notify)-附源代码解释

自由小窝 350

前言:

今天大家对“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