【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月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
221 1
|
3月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
422 0
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
3月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
416 1
Java 数据库 Spring
171 0
|
3月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
277 16
|
4月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。
|
4月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
363 1
|
2月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
277 5