线程方法
参考 https://blog.csdn.net/qq_34944851/article/details/53576715
1.线程join();
在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。
package cn.edu.xatu; class Mom extends Thread{ public void run(){ System.out.println("妈妈洗菜准备做饭"); System.out.println("发现没有酱油了"); Son S = new Son(); S.start();//必须start()否则,线程不加入 try { S.join(); } catch (InterruptedException e) { e.printStackTrace(); } } class Son extends Thread{ public void run(){ System.out.println("儿子下楼帮妈妈买酱油"); System.out.println("全家人开开心心吃饭"); } } public static void main(String[] args){ Mom m = new Mom(); m.start(); } }
运行结果:
2.获取当前线程的名字Thread.currentThread.getName();
package cn.edu.xatu; //获取当前线程的名字 public class Test extends Thread{ public void printMessage(){ //获取当前线程的名字 Thread t = Thread.currentThread(); String name = t.getName(); System.out.println("name =: "+ name); } public void run(){ for (int i = 0; i <10 ; i++){ printMessage(); } } public static void main(String[] args){ Test T = new Test(); T.setName("Thread"); T.start(); for (int i = 0; i <5 ; i++) { T.printMessage(); } } }
3.isAlive();
package cn.edu.xatu; /** * 看线程是否存活 */ public class TwoThreadAlive extends Thread { public void run() { for (int i = 0; i < 10; i++) { printMsg(); } } public void printMsg() { Thread t = Thread.currentThread(); String name = t.getName(); System.out.println("name=" + name); } public static void main(String[] args) { TwoThreadAlive tt = new TwoThreadAlive(); tt.setName("Thread"); System.out.println("before start(), tt.isAlive()=" + tt.isAlive()); tt.start(); System.out.println("just after start(), tt.isAlive()=" + tt.isAlive()); // for (int i = 0; i < 10; i++) { tt.printMsg(); } System.out.println("The end of main(), tt.isAlive()=" + tt.isAlive()); } }
4.setDemo守护线程
模拟qq下载架包
设置守护线程,一个线程不能设置为守护线程。主线程结束,守护线程死亡。
package cn.edu.xatu; public class SetDemo extends Thread{ public SetDemo(String name){ super(name); } public void run(){ for (int i = 1; i <=100 ; i++) { if (i==100){ System.out.println("下载完成"); } System.out.println("下载了%" + i); try { sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ SetDemo S = new SetDemo("后台进程"); //一个线程不是守护线程 // System.out.println(S.isDaemon()); S.setDaemon(true); S.start(); for (int i = 0; i <=100 ; i++) { System.out.println(Thread.currentThread().getName()+i); } } }