Java多线程编程核心技术第七章笔记:拾遗增补

1、线程的状态:线程对象在不同的运行时期有着不同的状态,此信息就存在与Thread.State枚举类中;

在调用与线程有关的方法后,会进入不同的线程状态;

2、验证NEW RUNNABLE TERMINATED三个状态;

在这里插入图片描述

3、验证TIMED_WAITING:此状态代表了执行Thread.sleep的方法,呈等待状态;

在这里插入图片描述

4、验证BLOCKED:此状态出现在某个线程等待锁的时候:

在这里插入图片描述

5、验证WAITING:此状态是线程执行了Object.wait()方法后所处的状态;

在这里插入图片描述

线程组:

1、线程对象关联线程组:1级关联

一级关联:父对象中有子对象,但并不创建子孙对象;关联到线程组这样子;
在这里插入图片描述在这里插入图片描述
java.lang.ThreadGroup:线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。

2、线程对象关联线程组:

多级关联:父对象中有子对象,子对象中再创建子对象,也就是出现子孙对象的效果了;

3、线程组自动归属特性:

在实例化一个ThreadGroup线程组x时如果不指定所属的线程组,那么这个线程组自动归到当前线程所属的线程组中,也就是隐式的在一个线程组中添加了一个子线程组;

4、获取根线程组:

Thread.currentThread().getThreadGroup().getParent().getName();=>>system
Thread.currentThread().getThreadGroup().getParent().getParent.getName();
=>>出现异常
说明JVM的根线程组就是system,再取其父线程组就出现空异常;NullPointerException;

5、线程组里加线程组:

ThreadGroup newGroup = new ThreadGroup(Thread.currentThread().getThreadGroup,“newGroup”);

6、组内的线程批量停止:

–>ThreadGroup group = new ThreadGroup(“我的线程组”);
–>group.interrupt();

使线程具有有序性:

正常情况下线程在运行时多个线程之间执行任务的时机是无序的,可以通过改造代码的方式使他们有序:

package Day02.Test;


/**
* @author Dangxuchao
* @Title: Test6
* @ProjectName 6.2 Java多线程核心编程第七章:查漏补缺
* @Description: 使线程具有有序性;
* 正常情况下线程在运行时多个线程之间执行任务的时机是无序的,
* 可以通过改造代码的方式使他们有序:
*
* @date 2019/6/7 22:22
*/


class Thread6 extends Thread{
    private Object lock;
    private String showChar;
    private int showNum;
    private int printCount = 0;//统计打印了几个字母
    private volatile static int addNumber = 1;


    public Thread6(Object lock, String showChar, int showNum) {
        this.lock = lock;
        this.showChar = showChar;
        this.showNum = showNum;
    }
    @Override
    public void run() {
        try{
            synchronized (lock){
                while (true){
                    if (addNumber % 3 == showNum){
                        System.out.println("线程名字="
                                +Thread.currentThread().getName()
                                +"run方法计数:"+addNumber+" "+showChar);
                        lock.notifyAll();
                        addNumber++;
                        printCount++;
                        if (printCount == 3){
                            break;
                        }
                    }else {
                        lock.wait();
                    }
                }
            }
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
}
public class Test6 {
    public static void main(String[] args) {
        Object lock = new Object();
        Thread6 a = new Thread6(lock,"A",1);
        Thread6 b = new Thread6(lock,"B",2);
        Thread6 c = new Thread6(lock,"C",0);
        a.start();
        b.start();
        c.start();
    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值