当前位置: 首页 > article >正文

JUC并发编程之Thread学习笔记

JUC并发编程之Thread

HotSport虚拟机
1、Thread 类是Java中的线程,它底层是基于内核中的线程。所以Java中线程的调度也是基于操作系统。
2、Thread类中的核心方法
2.1 运行相关

run() : 线程实际运行的方法
start() : 启动线程,将线程状态变为runnable

2.2 线程阻塞方法

sleep() 静态native方法 当前线程睡眠,不会释放锁
// 获取到对象锁
wait() 释放锁,进入monitor管程等待队列,直到被其它获取到相同锁的线程调用notify()/notifyAll()方法
join()/join(n) 底层是wait() 方法作用是等待/等待n毫秒 线程结束。

2.3 线程打断

interrupt() 设置线程打断标志
interrupted() 判断线程是否被打断,同时清空打断标志
isInterrupted()  判断线程是否被打断,不清除打断标志

sleep join wait方法均会被打断标志中断。

2.4 线程调度与协调

wait notify : 和synchronized精确控制线程之间协同
yield() 设置当前线程让出时间片,进入 rannable状态。同城用于测试和调试
setPriority() 设置线程优先级。通常和虚拟机所处操作系统相关,因为他设置的是内核中线程的优先级。(得确认操作系统识别哪些优先级)
yield和setPriority 只是设置线程标识或者状态,具体调度依然是操作系统决定。wait notify则是编程人员决定的。

2.5 基于interrup方法的两阶段提交
```java
public class DoubleCommitThread {

    private Thread monitor;

    public void execute(){
        monitor = new Thread(() -> {
            while (true){
                if (Thread.currentThread().isInterrupted()){
                    System.out.println("监控被终止,料理后事");
                    break;
                }
                System.out.println("做日志记录");
                try {
                    Thread.sleep(2000L);
                } catch (InterruptedException e) {
                    System.out.println("重新设置打断");
                    // 重新设置打断标记
                    Thread.currentThread().interrupt();
                }
            }
        });
        monitor.start();
    }

    public static void main(String[] args) throws InterruptedException {
        DoubleCommitThread doubleCommitThread = new DoubleCommitThread();
        doubleCommitThread.execute();
        Thread.sleep(10000L);
        doubleCommitThread.monitor.interrupt();
    }
}

http://www.kler.cn/a/449357.html

相关文章:

  • 0009.基于springboot+layui的ERP企业进销存管理系统
  • 【机器学习】探索机器学习与人工智能:驱动未来创新的关键技术
  • Aec-Library-Website 项目常见问题解决方案
  • 重拾设计模式--观察者模式
  • 固定电话采用的是模拟信号还是数字信号?如果通话两端采用不同的信号会发生什么?
  • OpenCV putText增加中文支持
  • count(1)、count(_)与count(列名)的区别?
  • 七牛云短信服务
  • 《前端web开发-HTML5基础》
  • 204页PPT金税四期监管要求与最新政策及风险防范-培训课件
  • Node二、Node.js 模块化、es6 软件包、Express - 框架
  • FastStone 10.x 注册码
  • springboot分布式id,基于snowflake的分布式统一id生成工具
  • 协作机器人做“按摩理疗”,机器人如何感知力度呢?
  • GoCD 持续集成和部署工具配置指南(CentOS 7)
  • Kafka常用集群配置参数
  • 精确与高效:二分查找的完整指南
  • Jenkins引发的多jdk设置问题
  • [AI]解释 Git 的基本概念和使用方式
  • FreeSWITCH的API与APP详解
  • 技术速递|使用 Dependabot 管理 .NET SDK 更新
  • C语言初阶习题【15】猜数字游戏
  • 数字孪生技术在智慧园区管理平台中的应用
  • [AIGC知识] layout理解
  • istio-proxy不打印访问日志怎么解决?
  • 最长公共子序列【东北大学oj数据结构10-3】C++