【Java Web】—— 线程的玩法及线程状态(下)

简介: 【Java Web】—— 线程的玩法及线程状态(下)

等待线程 join()

  • 有时,我们需要等待一个线程完成它的工作后,才能进行自己的下一步工作。
  • join方式使用时会让线程进入阻塞, 而且是如A执行B.join 会让A进入阻塞 B线程会正常运行, 直到B执行完, A才会执行
public class ThreadTest6 {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 3; i++) {
                    System.out.println("我是张三");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        };
        Thread thread1 = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 3; i++) {
                    System.out.println("我是李四");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        thread.start();
        thread.join();
        thread1.start();
    }
}


我是张三
我是张三
我是张三
我是李四
我是李四
我是李四


获取当前线程的引用 currentThread()

使用Thread.currentThread() 相当于获取当前线程的实例

System.out.println(Thread.currentThread().getName() + "在打游戏");

休眠线程 sleep()

  • 有一点要记得,因为线程的调度是不可控的,所以,这个方法只能保证休眠时间是大于等于休眠时间的。

  • 方法

    public static void sleep(long millis) throws InterruptedException 休眠当前线程 millis 毫秒

    public static void sleep(long millis, int nanos) throws InterruptedException 可以更高精度的休眠


线程的状态

线程的所有状态

public class ThreadTest7 {
    public static void main(String[] args) {
        for (Thread.State s : Thread.State.values()
             ) {
            System.out.println(s);
        }
    }
}
NEW
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED

线程状态的意义

  1. NEW

    Thread对象有了,但是内核中的PCB对象还没有,就是任务布置了,还没有开始执行

  2. RUNNABLE

    就绪状态, 正在CPU上执行,或者在就绪队列上等待执行

    接下来三种都是线程属于阻塞时的状态, 不会在CPU上执行,等时机成熟有机会才会进入就绪状态执行

  3. BLOCKED

    等待锁

  4. WAITING

    wait导致

  5. TIMED_WAITING

    sleep导致

  6. TERMINATED

    内核中线程已经结束PCB没了,但是thread对象还在等待GC来回收

    所以有一点较重要, isAlive是判断线程是否存活,也就是判断PCB是否存活, 所以只有中间四种状态才会显示true


线程状态的转移

【Java Web】—— 线程的玩法及线程状态_创建线程


目录
相关文章
|
2天前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
11 1
|
1天前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
|
1天前
|
安全 Java
【JAVA进阶篇教学】第六篇:Java线程中状态
【JAVA进阶篇教学】第六篇:Java线程中状态
|
1天前
|
缓存 Java
【JAVA进阶篇教学】第五篇:Java多线程编程
【JAVA进阶篇教学】第五篇:Java多线程编程
|
1天前
|
Java
【JAVA基础篇教学】第十二篇:Java中多线程编程
【JAVA基础篇教学】第十二篇:Java中多线程编程
|
1天前
|
安全 Java
java-多线程学习记录
java-多线程学习记录
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
12 0
|
2天前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
9 0
|
2天前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
6 0
|
2天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
11 1