用到技术
1.用兰姆达表达式启动线程
2.synchronized加锁
3.volatile 控制可见性
4.notify() 和 wait() 的线程等待的使用

synchronized与volatile 的区别
以下是一个小demo
/**

  • 线程2 监听 线程1(添加10个元素 当添加第五个的时候 线程二提示 并停止)
  • 需要加上volatile 保证 可见性
  • notify();不释放锁 唤醒等待的线程 并继续执行 wait()释放锁 让线程等待
  • @author CTH

*/
public class Demo1 {

volatile static List<Integer> list = new ArrayList<Integer>();
synchronized void add() {System.out.println("t1 启动了");for(int i=0; i<10; i++) {try {list.add(i);TimeUnit.SECONDS.sleep(1);if(list.size() == 5) {//线程1 等待 不释放锁notify();//释放锁 让t2执行wait();}} catch (InterruptedException e) {e.printStackTrace();} System.out.println(list.size());}
}
synchronized void size() {System.out.println("t2 启动了");while(true) {if(list.size()==5) {System.out.println("线程1长度为5  t2停止");//唤醒线程t1 不释放锁 继续执行notify();break;}}
}
public static void main(String[] args) {Demo1 d = new Demo1();new Thread(d::add,"t1").start();new Thread(d::size,"t2").start();/*new Thread(()-> {for(int i=0; i<10; i++) {try {list.add(i);TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(list.size());}},"t1").start();new Thread(()-> {while(true) {if(list.size()==5) {new Thread("t1").stop();System.out.println("线程1长度为5  停止");break;}}},"t2").start();*/}

}
执行如下:

Thread学习(一)相关推荐

  1. C++ boost thread学习(二)

    条件变量 如果线程之间执行顺序上有依赖关系,可使用条件变量(Condition variables). 可以到boost官网中参考条件变量(Condition variables)的使用. 条件变量必 ...

  2. java Thread学习(线程间协作)

    线程件协作 线程之间除了使用锁同步两个任务的行为外,还需要进行协作,例如任务A必须在B完成后才能执行. wait()和notify()/notifyAll() wait()会去等待外部信号,并且在等待 ...

  3. InnoDB master thread工作原理

    我们简单交流下InnoDB master thread学习,有兴趣的朋友可以参考<<MySQL技术内蒙--InnoDB存储引擎第二版>> void master_thread( ...

  4. BOOST THREAD

    转载:http://www.blogjava.net/LittleDS/category/31585.html Boost Thread学习笔记 thread自然是boost ::thread库的主 ...

  5. Python基础教程:线程操作(oncurrent模块)详解

    进程是cpu资源分配的最小单元,一个进程中可以有多个线程. 线程是cpu计算的最小单元. 对于Python来说他的进程和线程和其他语言有差异,是有GIL锁. GIL锁 GIL锁保证一个进程中同一时刻只 ...

  6. Java多线程01:创建新的执行线程

    ⭕️前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(点击跳转到网站)⭕️ 创建新的执行线程(thread.Runnable) 核心概念 线程就是独立的执行路径 在程序 ...

  7. java线程学习-Thread.currentTread().getName()和this.getName()的区别

    很久没有写java程序了,由于为了改变目前的状况,打算花两天时间学习一下java的线程开发和高并发. 线程开发使用thread类,或者runnable接口,而且thread类也是实现了runnable ...

  8. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  9. CUDA学习----sp, sm, thread, block, grid, warp概念

    CUDA学习----sp, sm, thread, block, grid, warp概念 2017-01-11 17:14:28|  分类: HPC&CUDA优化 |  标签:cuda  g ...

最新文章

  1. private 的访问权限
  2. 大数据和python哪个好_大数据语言之争:Java和python哪个好?
  3. tomcat使用ssl_使用SSL和Spring Security保护Tomcat应用程序的安全
  4. oracle 事务未正常回滚,Spring事务没有回滚异常(Oracle JNDI数据源)
  5. JAVA构造函数是不是封装_Java 封装与构造函数
  6. CCF201509-4 高速公路(100分)
  7. HDU-简易版之最短距离(最短路)
  8. ORACLE_mldn_002
  9. 基础级拆机-神舟战神GX8CP5s1上8700发现较为鸡肋-仿CP7s2
  10. java调色板代码_调色板的代码
  11. 11.什么是Heuristic
  12. 师傅对徒弟有大小眼怎么办?
  13. 甘特图是什么意思?甘特图制作步骤教程
  14. 解忧杂货铺----读后感
  15. 敏捷开发产品管理系列之四:新产品研发
  16. 如何正确选择ARM核心板、ARM工控板的存储类型?
  17. Redis使用setnx实现分布式锁及其问题、优化
  18. 基于无人机和背负式激光雷达点云的黄河三角洲刺槐林地上生物量估算
  19. 毕设项目:基于BS模型的在线OJ系统
  20. 网络加速器是干什么用的?

热门文章

  1. 微信7.0.16 for iOS测试版新增隐藏会话功能
  2. 程序员离职原因的最佳回答_员工离职了还将公司的代码盗走做开发!还挖走程序员!...
  3. 程序员,为什么千万不要重写代码?
  4. CureApp高血压治疗App:2021 ESC大会发布在知名心血管期刊《欧洲心脏杂志》上发表的临床试验结果
  5. java高级用法之:在JNA中使用类型映射
  6. Plecs电力电子仿真专业教程-第一季 补充课程 Plecs的安装教程与软件下载
  7. 斗鱼直播项目(已开源)
  8. 天勤2022数据结构(六)图
  9. Matlab电路原理应用——计算未知电阻
  10. 主成分分析在SPSS中的操作应用