Thread

本文详细介绍了Java中线程的状态,包括NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING和TERMINATED,并通过示例解释了如何创建和中断线程。此外,还深入探讨了sleep方法和wait方法的区别,强调了sleep不会释放锁而wait会。在示例代码中,展示了wait和notify操作以及sleep不释放锁的行为,证明了wait在同步块中释放锁的特性。
摘要由CSDN通过智能技术生成

线程的状态

Thread.state: NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING,TERMINATED

new Thread()  implements   Runnable   implements Callable
本质上都是通过 Thread 来运行
Callable 通过 FutureTask  task.get() 
LockSupport.park(this) 等待TIME_WAITING来获取返回值.
FutureTask task =new FutureTask(callableTest);
Thread t1= new Thread(task); t1.start();

中断线程

interrupt 设置中断线程
如果线程在运行状态会把线程状态设置为中断状态
如果线程在阻塞、等待状态 会进入 InterruptedException 异常 中断状态为false;
Thread.currentThread().isInterrupted()  获取线程的中断状态
Thread.interrupted()  会把线程的中断状态重置返回.

Thread.stop()
不安全,会立马释放掉所持有的锁,会导致所保护的资源不一致.

sleep  与  wait 的区别

sleep 不释放锁  wait 释放锁

wait 必须搭配synchronized 关键字使用(如果不搭配会Lost Wake-Up Problem,唤醒丢失的问题)  sleep 不需要

进入wait状态下的线程能被 notify(随机唤醒一个) notifyAll唤醒  sleep不行

怎么证明sleep 不释放锁,wait释放锁

public static void main(String[] args) throws InterruptedException {
         Object obj= new Object();
         new Thread(()->{
             synchronized (obj){
                 System.out.println(" obj wait");
                 try {
                     obj.wait();
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
                 System.out.println(" obj wait end");
             }
         }
         ).start();
         Thread.sleep(200);
         synchronized (obj){
             System.out.println(" obj notify");
             obj.notify();
             System.out.println(" obj notify end");
         }
         Object obj2 = new Object();
          new Thread( ()->{
           synchronized (obj2){
                     System.out.println(" obj2 sleep  start");
                     try {
                         Thread.sleep(1000);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
                     System.out.println("obj2 sleep end");
                 }
         }).start();

      Thread.sleep(200);
        synchronized (obj2){
            System.out.println(" obj2 notify");
            obj2.notify();
            System.out.println(" obj2 notify end");
        }

    }
 obj wait
 obj notify
 obj notify end
 obj wait end
 obj2 sleep  start
obj2 sleep end
 obj2 notify
 obj2 notify end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值