线程的状态: 1:新生状态 新创建了一个对象,但还没有使用start()方法。 2:就绪状态 等待获取cpu的使用权。 3:运行状态 4:阻塞状态 (1):sleep方法:线程进入阻塞状态,然后进入就绪状态。
public static void main(String[] args) { new Thread(new Father()).start(); } } class Father extends Thread{ @Override public void run() { System.out.println("爸爸想抽烟。。。。"); System.out.println("让儿子去买烟。。。。"); System.out.println("把钱给了儿子。。。。"); Son w=new Son(); w.start(); try { w.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("爸爸接过烟。。。。"); System.out.println("把零钱给了儿子。。。。"); } } class Son extends Thread{ @Override public void run() { System.out.println("儿子接过钱,去买烟了。。。。"); System.out.println("见到了一个游戏厅,跑进去玩去了。。。。"); for(int i=1;i<=10;i++) { System.out.println("儿子玩了"+i+"秒。。。。"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("想起要去买烟。。。。"); System.out.println("回家给了爸爸烟。。。。"); } } (2):join方法:插队,可以将两个交替执行的线程合并为顺序执行的线程 //join:合并线程,插队 public class BlockedJoin01 { public static void main(String[] args) throws InterruptedException { Thread tt=new Thread(() ->{ for(int i=1;i<100;i++) { System.out.println("d-->"+i); } }); tt.start(); for(int i=1;i<100;i++) { if(i%40==0) { tt.join();//main被插队,合并,先执行tt线程 } System.out.println("main-->"+i); } } } (3):Yield方法:Yield方法之间进入就绪状态! //yield之间进入就绪状态,sleep则是进入阻塞状态然后进入就绪状态 public class YieldDemo01 { public static void main(String[] args) { MyYield my=new MyYield(); new Thread(my,"a").start(); new Thread(my,"b").start(); } } class MyYield implements Runnable{ @Override public void run() { // TODO Auto-generated method stub System.out.println(Thread.currentThread().getName()+"-->"+"start"); Thread.yield();//礼让 System.out.println(Thread.currentThread().getName()+"-->"+"end"); } }5:死亡状态 线程使用结束。
