企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
> ### Thread类方法 * yield ~~~ yield是native修饰的原生方法,作用是当前线程让出执行机会,让cpu可以优先调用其它线程。 ​ 特点: 1.当前线程不会阻塞,同样有执行机会 2.静态方法,一般用于当前线程让步 3.如果获得锁,不会释放 ~~~ * join ~~~ 线程让另一个线程先执行完后再执行。 ​ 特点: 1. 当前线程阻塞,直到加入线程执行完毕 2. 方法响应终断 3. 如果获得锁,不会释放 ~~~ ep: ~~~ public static void main(String arg[]){     Thread A = new Thread();     A.join(); // 表示当前线程(main)让A线程执行完毕后继续执行 } ~~~ * sleep ~~~ 静态方法,表示让当前线程睡眠一段时间。 ​ 特点: 1.当前线程阻塞,直到睡眠时间结束 2.方法响应终断 3.如果获得锁,不会释放 ~~~ * stop、suspend、resume ~~~ stop: ​ 1. 即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。 ​ 2. 会立即释放该线程所持有的所有的锁,导致数据得不到同步的处理,出现数据不一致的问题。 ~~~ ~~~ suspend和resume: ​ 这两个方法一般会同时出现,否则会容易发生死锁。suspend将线程挂起,只有调用resume才能重新执行。线程挂起期间,并不会去释放任何拥有的锁资源。 ~~~ > ### Object类方法 - wait 和 notify ~~~ wait 将当前线程挂起,释放锁资源, 直到执行notify或者notifyAll激活该线程重新执行。 ​ notify 激活一个阻塞的线程。 ​ notifyAll 激活所有阻塞的线程 ~~~ * [ ] tip: wait、notify、notifyAll都是Object里的方法,和任何Object都能成为synchronized的锁对象一样,这些方法和锁之间存在着关联,当任何对象使用方法时必须在同步方法块或者同步方法中执行,并且锁对象必须为执行方法的对象。 * [ ] ep: ~~~ static Object lock = new Object(); ​ public static void main(String []arg) throws Exception{      new Thread(()->{          synchronized(lock){              System.out.println("线程等待");               try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); }         }          System.out.println("线程执行完成");     },"等待").start();         Thread.sleep(1000);         new Thread(()->{          synchronized(lock){              System.out.println("激活线程");              lock.notify();         }     },"激活").start();        System.in.read(); } ~~~