美文网首页
线程知识点复习(一)

线程知识点复习(一)

作者: 来往穿梭 | 来源:发表于2018-08-28 18:54 被阅读9次

守护线程与非守护线程:

java中有两条线程:1.守护线程,2.非守护线程(用户线程)
守护线程与main主线程同时销毁,而用户线程与主线程无关
用户线程 可使用setDaemon(true)方法设置为守护线程

多线程运行状态:

  • 新建
  • 准备(就绪)
  • 运行
  • 休眠(阻塞)
  • 停止


    线程运行状态
    线程运行状态

join方法:

join作用:让其他线程变为等待,比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

class JoinThread implements Runnable {

    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "---i:" + i);
        }
    }
}

public class JoinThreadDemo {

    public static void main(String[] args) {
        JoinThread joinThread = new JoinThread();
        Thread t1 = new Thread(joinThread);
        Thread t2 = new Thread(joinThread);
        t1.start();
        t2.start();
        try {
       //其他线程变为等待状态,等t1线程执行完成之后才能执行join方法。
            t1.join();
        } catch (Exception e) {

        }
        for (int i = 0; i < 100; i++) {
            System.out.println("main ---i:" + i);
        }
    }

}

应用: t1,t2,t3 三个线程如何按顺序执行?(利用join方法)

public class SyncDemo{
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "运行" + "---" + i);
            }

        });
        Thread t2 = new Thread(() -> {
            try {
                t1.join();//与t1有关,会使编译器放弃重排序
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "运行" + "---" + i);
            }
        });
        Thread t3 = new Thread(() -> {
            try {
                t2.join();//与t2有关,会使编译器放弃重排序
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "运行" + "---" + i);
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}

相关文章

  • 线程知识点复习(一)

    守护线程与非守护线程: java中有两条线程:1.守护线程,2.非守护线程(用户线程)守护线程与main主线程同时...

  • iOS知识点复习-多线程

    GCD:一、基本概念1、同步:不开启新线程。省去了NSThread加同步锁的步骤。2、异步:可以开启新线程3、串行...

  • 无标题文章

    综和复习本月知识点总结: 一:微信小程序 二:vue复习 三:js复习 四:新知识点 一:微信小程序知识点总结 开...

  • concurrent包下线程池类小结

    并发包下的线程池技术虽然常用,但是知识点较多易忘。所以,参考网络资源做了一个小结,便于复习。 1.Executor...

  • Java并发知识点快速复习手册(下)

    前言 本文快速回顾了常考的的知识点,用作面试复习,事半功倍。 面试知识点复习手册 已发布知识点复习手册 Java基...

  • Android 面试系统复习系列(四)线程 / 线程池 / 多线

    Android 面试系统复习系列(四)线程 / 线程池 / 多线程 线程 线程的状态 New ...

  • iOS多线程-线程的状态

    复习下线程的基础知识, 这里主要是参考文顶顶多线程篇复习写的。 一、简单介绍 1、线程的创建 2、线程的开启 3、...

  • iOS多线程-GCD的常见用法

    复习下线程的基础知识, 这里主要是参考文顶顶多线程篇复习写的。 1、线程间通信示例 从子线程回到主线程 2、延时执...

  • 2022年11月复习《独立思考》

    复习模板 日期: 分享者: 复习课程和知识点: 对知识点的理解(用你自己的话表达): 知识点的适用(使用)场景: ...

  • iOS多线程-线程间通信

    复习下线程的基础知识, 这里主要是参考文顶顶多线程篇复习写的。 一、简单说明 线程间通信:在1个进程中,线程往往不...

网友评论

      本文标题:线程知识点复习(一)

      本文链接:https://www.haomeiwen.com/subject/qcrfwftx.html