ToB企服应用市场:ToB评测及商务社交产业平台

标题: java死锁、线程状态、线程通信、线程池 [打印本页]

作者: 东湖之滨    时间: 2023-8-29 00:37
标题: java死锁、线程状态、线程通信、线程池
1. 回顾

2. 正文

3. 什么是死锁

  1. //死锁小案例
  2. import java.util.concurrent.locks.ReentrantLock;
  3. public class ccc {
  4.     public static Object lock = new Object();
  5.     public static Object lock2 = new Object();
  6. }
  7. public class eee extends Thread {
  8.     @Override
  9.     public void run() {
  10.         synchronized (ccc.lock){
  11.             System.out.println("aaa");
  12.             synchronized (ccc.lock2){
  13.                 System.out.println("bbb");
  14.             }
  15.     }
  16. }}
  17. public class fff extends Thread{
  18.         public void run(){
  19.         synchronized (ccc.lock2){
  20.             System.out.println("fff");
  21.             synchronized (ccc.lock){
  22.                 System.out.println("e");
  23.             }
  24.         }
  25.         }
  26. }
  27. public class ddd {
  28.     public static void main(String[] args) throws InterruptedException {
  29.         eee eee = new eee();
  30.         fff fff = new fff();
  31.         eee.start();
  32.         Thread.sleep(100);
  33.         fff.start();
  34.     }
  35. }
复制代码
如何解决死锁:  (1) 减少同步代码块的嵌套。 (2)设置锁的超时时间。(3)可以使用安全类-jdk提高的安全类。
4. 线程通信



notify():唤醒。

sleep和wait方法的区别?
(1) 来自不同的类: sleep来自于Thread, wait来自Object类。
(2) 是否释放锁资源: sleep不会释放锁资源。wait会释放锁资源。
(3) 用法: sleep时间到了自然会醒,而wait需要调用notify或notifyAll()方法唤醒。
notify和notifyAll()方法的区别?
1.notify随机唤醒等待队列中一个线程,而notifyAll会唤醒等待队列中所有的线程。
5.  线程的状态

  1. NEW:新建状态
  2. RUNNABLE: start()就绪状态-时间片-运行状态. 统称为RUNNABLE
  3. BLOCKED: 堵塞状态。加锁时就如该状态
  4. WAITING: 无期等待:  调用wait方法时会进入该状态
  5. TIMED_WAITING: 有期等待---当调用sleep方法时就会进入该状态
  6. TERMINATED: 终止状态。线程的任务代码执行完毕或出现异常。
复制代码
线程的状态之间可以通过调用相应的方法,进行转换。
6. 线程池


线程池的原理:

线程池的创建
[code]package demo08;import java.util.concurrent.*;/*     Executor: 它是线程池的根接口:         void execute(Runnable command):执行Runnable类型的任务。     ExecutorService: 它是Executor的子接口。---         void shutdown():关闭线程池。需要等任务执行完毕。         shutdownNow(); 立即关闭线程池。 不在接受新的任务。         isShutdown(): 判断是否执行了关闭。         isTerminated(): 判断线程池是否终止。表示线程池中的任务都执行完毕,并且线程池关闭了         submit(Callable task);提交任务,可以提交Callable         submit(Runnable task): 提交任务,可以提交Runnable任务     Executors: 它是线程池的工具类,该类提供了创建线程池的一些静态方法 */public class Test {    public static void main(String[] args) {           //1.创建一个固定长度的线程池。//        ExecutorService executorService = Executors.newFixedThreadPool(5);        //2. 单一线程池。//        ExecutorService executorService = Executors.newSingleThreadExecutor();        //3. 可变线程池--缓存线程池//        ExecutorService executorService = Executors.newCachedThreadPool();        //4. 延迟线程池。//        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(5);//        for(int i=0;i




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4