前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础知识(十二)--多线程通信

Java基础知识(十二)--多线程通信

作者头像
用户7386338
发布2021-06-22 18:31:41
2330
发布2021-06-22 18:31:41
举报
文章被收录于专栏:Java患者Java患者

两个线程间的通信

什么时候需要通信

  • 多个线程并发执行时,在默认情况下CPU是随机切换线程的
  • 如果我们希望他们有规律的执行.就可以使用通信,例如每个线程执行一次打印

怎么通信

  • 如果希望线程等待,就调用wait()
  • 如果希望唤醒等待的线程,就调用notify()
  • 这两个方法必须在同步代码中执行,并且使用同步锁对象来调用

三个或者三个以上间的线程通信

  • notify()是随机唤醒一个线程
  • notifyAll()方法是唤醒所有线程
  • jdk5之前无法唤醒指定的一个线程
  • 如果多个线程之间通信,需要使用notifyAll()通知所有线程,用while来反复判断条件

同步

  • 使用ReentrantLock类的lock()和unlock方法进行同步

通信

  • 使用ReentrantLock类的newCondition()方法可以获取Condition对象
  • 需要等待的时候使用Condition的await()方法,唤醒的时候用signal()方法
  • 不同的线程使用不同的Condition,这样就能区分唤醒的时候找哪个线程了

线程组

概述

代码语言:javascript
复制
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr, "张三");
Thread t2 = new Thread(mr, "李四");
//获取线程组
// 线程类里面的方法:public final ThreadGroup getThreadGroup()
ThreadGroup tg1 = t1.getThreadGroup();
ThreadGroup tg2 = t2.getThreadGroup();
// 线程组里面的方法:public final String getName()
String name1 = tg1.getName();
String name2 = tg2.getName();
System.out.println(name1);
System.out.println(name2);
// 通过结果我们知道了:线程默认情况下属于main线程组
// 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
System.out.println(Thread.currentThread().getThreadGroup().getName());
代码语言:javascript
复制
// ThreadGroup(String name)
ThreadGroup tg = new ThreadGroup("这是一个新的组");

MyRunnable mr = new MyRunnable();
// Thread(ThreadGroup group, Runnable target, String name)
Thread t1 = new Thread(tg, mr, "张三");
Thread t2 = new Thread(tg, mr, "李四");

System.out.println(t1.getThreadGroup().getName());
System.out.println(t2.getThreadGroup().getName());

//通过组名称设置后台线程,表示该组的线程都是后台线程
tg.setDaemon(true);
  • 自己设定线程组
  • ThreadGroup(String name) 创建线程组对象并给其赋值名字
  • Thread(ThreadGroup group, Runnable target, String name)
  • public final ThreadGroup getThreadGroup() 通过线程对象获取他所属于的组
  • Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,java允许程序直接对线程组进行控制
  • 我们也可以给线程设置分组

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 两个线程间的通信
    • 什么时候需要通信
      • 怎么通信
        • 三个或者三个以上间的线程通信
          • 同步
            • 通信
              • 线程组
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档