线程学习(一)---线程组
来源:互联网 发布:苹果6快速关闭蜂窝数据 编辑:程序博客网 时间:2024/06/05 14:09
线程组
可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示:
线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织。
线程组关联 (子父类关联/一级关联)
实现一个线程
public class ThreadGroupTest implements Runnable{@Overridepublic void run() {try {while(!Thread.currentThread().isInterrupted()){System.out.println("Thread name:"+Thread.currentThread().getName());Thread.sleep(3000);}} catch (Exception e) {// TODO: handle exception}}}
PS:线程的Interrupt() 表示中断线程 他是实现线程阻塞的方法之一 (stop,sleep...)
Thread.currentThread().isInterrupted() boolean值 判断线程是否中断 中断的话为true 反之false
Thread(3000);当前正在执行的线程睡眠3s,sleep不会释放锁和系统资源
main函数创建线程组
public static void main(String args[]){ThreadGroup g1=new ThreadGroup("group_1");//parentThreadGroup g2=new ThreadGroup(g1, "group_2");//son 属于上述线程组 符合文章开头的图片对应关系ThreadGroupTest tg1=new ThreadGroupTest();ThreadGroupTest tg2=new ThreadGroupTest();Thread t=new Thread(g1,tg1);Thread t1=new Thread(g2,tg1);Thread t2 =new Thread(g2,tg2);t.start();t1.start();t2.start();System.out.println("当前线程组为"+Thread.currentThread().getThreadGroup().getName());//系统线程 根类System.out.println("线程组名称"+g1.getName());System.out.println("线程活动数"+g1.activeCount());//组内线程和组内线程组线程 总和System.out.println("线程组名称"+g2.getName());System.out.println("线程活动数"+g2.activeCount());System.out.println("线程组父类组"+g2.getParent().getName());}
执行结果
根据下面每次的线程执行顺序可以看出多线程同时执行的话造成的线程安全性问题,也就是竞争cpu资源的不确定性,后话
依靠线程组进行线程的批量停止
public class ThreadInterruptTest extends Thread{ public ThreadInterruptTest(ThreadGroup g,String name) {// TODO Auto-generated constructor stubsuper(g,name);//实现继承线程才能调用 使用接口不能实现}@Overridepublic void run() {// TODO Auto-generated method stub//super.run();System.out.println(Thread.currentThread().getName()+"is ready");while(!Thread.currentThread().isInterrupted()){//执行死循环}//执行interrupt()后 线程中断停止System.out.println(Thread.currentThread().getName()+"ended");}
main函数
public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub ThreadGroup tg=new ThreadGroup("g1"); ThreadInterruptTest t=null; for(int i=1;i<5;i++){ t=new ThreadInterruptTest(tg, "Thread"+i); t.start(); } Thread.sleep(3000);//睡眠3s 保证thread 都为ready状态 否则会抛出 InterruptedException 异常 System.out.println("线程组调用interrupt方法"); tg.interrupt();}}
执行结果
阅读全文
0 0
- 线程学习(一)---线程组
- 线程学习(一)
- 线程学习(一)
- 线程学习(一)
- 线程学习(一)
- 线程学习(一)
- 线程学习(一)----后台线程
- 线程学习一:线程基础
- java 线程学习(一)
- linux 线程学习(一)
- 线程学习笔记(一)
- 线程学习总结(一)
- 线程池学习(一)
- Delphi 线程学习(一)
- JAVA线程学习(一)
- 线程的学习(一)
- 线程学习笔记(一)
- Java线程学习(一)
- 深入理解Java垃圾回收机制
- 高级软件工程第一次线上作业
- 基于空间金字塔池化的卷积神经网络物体检测
- include指令与include动作的区别
- iis7 https站点服务 发生413错误 未显示页面,因为请求实体过大
- 线程学习(一)---线程组
- [译]How browsers work
- ActiveMQ5.14.1+Zookeeper3.4.9高可用伪分布式部署
- 点联动自动无限轮播
- activiti组
- pip 更换源
- 哈希表查找——成功和不成功时的平均查找长度
- 机械师F117夜鹰双盘双系统windows10+ubuntu14.04
- struts2验证框架