package thread.basics; public class Test_Sleep_Yield_Join { public static void main(String[] args) { //sleep意思就是睡眠,当前线程暂停一段时间让其余线程去执行,时间到了自动复活 // testSleep(); //yield的意思是当前线程让出一下cpu,后面大家能不能抢到,我无论,也有可能被当前线程继续抢占(实际运用中基本用不到) // testYield(); //join的意思就是当前线程调用其余线程的jion,会先执行其余线程,直到其余线程执行完毕,才继续执行当前线程 testJoin(); } /** * @Author liuyi * @Description sleep意思就是睡眠,当前线程暂停一段时间让其余线程去执行,时间到了自动复活。 * @Date 22:29 2020/5/23 * @Param [] * @return void **/ static void testSleep() { new Thread(()->{ for(int i=0; i<100; i++) { System.out.println("A" + i); try { Thread.sleep(500); //TimeUnit.Milliseconds.sleep(500) } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } /** * @Author liuyi * @Description * @Date 22:31 2020/5/23 * @Param [] * @return void **/ static void testYield() { new Thread(()->{ for(int i=0; i<100; i++) { System.out.println("A" + i); if(i%10 == 0) Thread.yield(); } }).start(); new Thread(()->{ for(int i=0; i<100; i++) { System.out.println("------------B" + i); if(i%10 == 0) Thread.yield(); } }).start(); } static void testJoin() { Thread t1 = new Thread(()->{ for(int i=0; i<10; i++) { System.out.println("A" + i); try { Thread.sleep(500); //TimeUnit.Milliseconds.sleep(500) } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t2 = new Thread(()->{ try { t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } for(int i=0; i<10; i++) { System.out.println("B" + i); try { Thread.sleep(500); //TimeUnit.Milliseconds.sleep(500) } catch (InterruptedException e) { e.printStackTrace(); } } }); t1.start(); t2.start(); } }
常见的线程状态有六种:java
1,新建状态:当咱们new一个线程,尚未调用start()方法的时候叫新建状态。线程
2,Ready就绪状态:当调用start方法以后,线程会被线程调度器来执行,可是一般线程并不能立刻执行,由于系统中还有其余线程共同抢占系统的资源,只有抢到了,才能进入Running运行状态,因此在这期间被称之为就绪状态。blog
3,Running运行状态:线程处于就绪状态,此时若是抢到系统资源就会进入Running运行状态,直到线程正常结束或者异常中断。生命周期
4,Teminated结束状态:若是顺利执行玩线程,就会进入Teminated结束状态,此时线程不能回到之前的任意状态。ip
5,TimedWaiting等待和Waiting等待:TimedWaiting等待指按照时间等待进入Ready就绪状态,时间到了自动回到Running运行状态。Waiting等待经过好比join方法让线程进入Ready就绪状态,须要手动调用方法好比notify()等方法进行唤醒,回到Running运行状态。资源
6,Blocked阻塞:在同步代码块的状况下没获得锁就会处于阻塞状态,得到锁以后就进入Running运行状态。同步