隨著互聯網越來越普及,多線程的問題越來越重要,今天我們就來介紹一下java中的多線程問題
java中實現多線程有兩種方法:
1、繼承Thread類;
2、實現Runnable接口。
下面來詳細介紹一下這兩種多線程的實現方式:
1、繼承Thread類,重寫run()方法
package com.duoxiancheng;public class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.PRintln("我是線程"+this.getId()); } } public static void main(String[] args) { MyThread my1 = new MyThread() ; my1.run(); MyThread my2 = new MyThread() ; my2.run(); } }執行結果如下:
我是線程9我是線程9我是線程9我是線程9..........我是線程10我是線程10我是線程10我是線程10我是線程10.........上面的代碼中,直接調用的run()方法,并沒有啟動多線程,所以結果是順序執行,my1.run()執行完之后在執行my2.run(),這樣寫這個多線程并沒有任何意義。
如果想要啟動多線程,應該使用start()方法啟動多線程,start()方法會自動調用run()方法,新的代碼如下:
package com.duoxiancheng;public class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("我是線程"+this.getId()); } } public static void main(String[] args) { MyThread my1 = new MyThread() ; my1.start(); MyThread my2 = new MyThread() ; my2.start(); } }運行兩次,結果分別為:第一次:
........我是線程10我是線程10我是線程10我是線程9我是線程10我是線程9我是線程9我是線程9我是線程9我是線程9我是線程9第二次:.......我是線程10我是線程9我是線程9我是線程9我是線程10我是線程10我是線程10我是線程10我是線程10我是線程10我是線程9我是線程10我是線程10我是線程10通過start()方法啟動的線程,不管my1.start()調用的run()方法是否執行完,都繼續執行my2.start()方法,如果my2.start()后面還有其他的代碼,同樣不需要管my2.start()中的run()方法是否執行完,直接執行后面的代碼。2、實現Runnable代碼
代碼如下:
package com.duoxiancheng;public class MyRunnable implements Runnable { private String threadName ; public MyRunnable(String tName) { this.threadName = tName ; } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(threadName); } } public static void main(String[] args) { MyRunnable m1 = new MyRunnable("線程A") ; MyRunnable m2 = new MyRunnable("線程B") ; m1.run(); m2.run(); }}運行結果:.......線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程A線程B線程B線程B線程B線程B........和Thread的run()方法一樣,上面代碼的Runnable的run()方法也是普通方法的功能,需要等到m1.run(); 方法執行完成,才能執行m2.run();方法,不能實現多線程的意義,如果想要實現多線程,需要通過Thread類的start()方法啟動。代碼如下:
package com.duoxiancheng;public class MyRunnable implements Runnable { private String threadName ; public MyRunnable(String tName) { this.threadName = tName ; } @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println(threadName); } } public static void main(String[] args) { MyRunnable m1 = new MyRunnable("線程A") ; MyRunnable m2 = new MyRunnable("線程B") ; Thread t1 = new Thread(m1) ; Thread t2 = new Thread(m2) ; t1.start(); t2.start(); }}運行結果如下:
線程A線程A線程B線程B線程B線程B........線程B線程B線程B線程A線程A線程A線程A
新聞熱點
疑難解答