java 22 - 18 多线程之 线程的状态转换、线程组

线程的状态转换图解:。。博客暂时不能上传图片

线程的线程组:

  线程组: 把多个线程组合到一起。
     它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。

首先创建一个Runnable的实现类

public class MyRunnable implements Runnable {

    public void run() {
        for(int x = 0; x < 10 ; x++){
            System.out.println(x);
        }
    }
}

先看看默认状态下,线程都会保存在哪个线程组中

 1     private static void method1() {
 2         //线程在默认线程数组中
 3
 4         //创建对象
 5         MyRunnable mr = new MyRunnable();
 6
 7         //创建线程对象
 8         Thread t1 = new Thread(mr,"阿三");
 9         Thread t2 = new Thread(mr,"阿四");
10
11         //如果不把线程添加到自定义线程数组中,那么它们会默认添加到系统给的一个线程数组中
12         //看看这个默认的线程数组是什么
13         //public final ThreadGroup getThreadGroup()返回该线程所属的线程组。 如果该线程已经终止(停止运行),该方法则返回 null。
14         ThreadGroup tg1 = t1.getThreadGroup();
15         ThreadGroup tg2 = t2.getThreadGroup();
16
17         //查看这个数组的名称
18         System.out.println(tg1.getName());
19         // 通过结果我们知道了:线程默认情况下属于main线程组
20
21         //链式方法查看这个数组的名称
22         // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
23         System.out.println(Thread.currentThread().getThreadGroup().getName());
24
25     }

由上面可知道,线程默认情况下属于main线程组

我们再让线程添加到自定义线程组中,并对线程组中的线程进行统一控制

 1     private static void method2() {
 2         //线程添加到自定义线程数组中
 3
 4         //创建对象
 5         MyRunnable mr = new MyRunnable();
 6         //创建线程数组
 7         ThreadGroup tg = new ThreadGroup("自定义线程数组");
 8
 9         //创建线程
10         //Thread(ThreadGroup group, Runnable target, String name)
11         //分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
12         Thread t1 = new Thread(tg,mr,"阿三");
13         Thread t2 = new Thread(tg,mr,"阿四");
14
15         //查看现在t1、t2所在的线程数组的名称
16         System.out.println(t1.getThreadGroup().getName());
17
18         //可以统一对t1、t2进行操作
19         //把tg数组里的所有线程都设置成守护线程
20         tg.setDaemon(true);
21
22     }
时间: 2024-10-06 00:29:37

java 22 - 18 多线程之 线程的状态转换、线程组的相关文章

java 22 - 7 多线程之控制线程的方法

线程休眠(让线程休息一会再运行) public static void sleep(long millis) 在自定义线程类中添加该方法. 更改后,运行测试类,结果就是每执行完一轮,就休息1秒(这里设置的是休眠1秒),再进行一轮. 一轮:(如果测试类调用了3个线程,那么就是随机运行3次为一轮) 如: 哈士奇:1,日期:Wed Oct 05 21:01:19 CST 2016 短尾猫:1,日期:Wed Oct 05 21:01:19 CST 2016 萨摩耶:1,日期:Wed Oct 05 21:

Java多线程之线程的状态以及线程间协作通信导致的状态变换

一:线程的状态以及变化图 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态). New:新建状态,当线程创建完成时为新建状态,即new Thread(...),还没有调用start方法时,线程处于新建状态. Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源.处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来

java 22 - 11 多线程之模拟电影院售票口售票

使用多线程实现的第二种方式: 首先创建自定义类 1 public class SellTicket implements Runnable { 2 // 定义100张票 3 private int ticket = 100; 4 5 public void run() { 6 7 //假设一直在售票 8 while(true){ 9 //现实中买票时,都会有延迟的,所以让线程休息下 10 try { 11 Thread.sleep(100); 12 } catch (InterruptedExc

JAVA笔记14__多线程共享数据(同步)/ 线程死锁 /

/** * 多线程共享数据 * 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行. * 多线程共享数据的安全问题,使用同步解决. * 线程同步两种方法: * 1.同步代码块 * synchronized(要同步的对象){ 要同步的操作 } * 2.同步方法 * public synchronized void method(){ 要同步的操作 } */ public class Main { public static void main(

java 22 - 3 多线程的概述以及其它所涉及的东西(看)

1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2:什么是进程? 通过任务管理器我们就看到了进程的存在. 而通过观察,就可以发现只有运行的程序才会出现进程. 进程:就是正在运行的程序. 进程是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 3:多进程有什么意义呢? 单进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情. 举例:一边玩游戏(游戏进程),一边听音乐(音乐进程). 也就是说现在的计算机都是支持多

多线程总结二:线程的状态转换

转自:http://zy19982004.iteye.com/blog/1626916 一.线程的状态图 二.初始状态 实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态 三.可运行状态 可运行状态只是说你资格运行,调度程序没有挑选到你,你就永远是可运行状态. 调用线程的start()方法,此线程进入可运行状态. 当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入可运行状态. 当前线

线程的状态与线程安全

线程也有生命周期,线程从创建到死亡会经历如下的过程: 创建(new)-->待运行(runnable)-->运行(running)-->死亡(dead) |_____阻塞______|(阻塞过程包含waiting.sleeping.yeild.join.blocked) 下面将一一讲诉具体的每个过程.前面讲到怎样创建一个线程,但创建完一个线程后此线程并不会马上进入到运行状态,而是要等分配到一定的资源(比如内存空 间)后变为runnable,当调用start()方法后,线程便开始运行.如果此

2.线程的状态转换以及基本操作

在上一篇文章中并发编程的优缺点谈到了为什么花功夫去学习并发编程的技术,也就是说我们必须了解到并发编程的优缺点,我们在什么情况下可以去考虑开启多个线程去实现我们的业务,当然使用多线程我们应该着重注意一些什么,在上一篇文章中会有一些讨论.那么,说了这么多,无论是针对面试还是实际工作中作为一名软件开发人员都应该具备这样的技能.万事开头难,接下来就应该了解如何新建一个线程?线程状态是怎样转换的?关于线程状态的操作是怎样的?这篇文章就主要围绕这三个方面来聊一聊. 1. 新建线程 一个java程序从main

5. 线程的状态、线程的阻塞的方式

Java中线程的状态分为6种 初始(NEW)状态:新创建了一个线程对象,但还没有调用start()方法. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统称为"运行".线程对象创建后其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权.此时处于就绪状态(ready).就绪状态的线程在获得cpu时间片后变为运行中状态(running) 阻塞(BLOCKED):