【Java线程】Thread Runnable必知必会
生活随笔
收集整理的這篇文章主要介紹了
【Java线程】Thread Runnable必知必会
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、Java中線程的創建有兩種方式:
通過繼承Thread類,重寫Thread的run()方法,將線程運行的邏輯放在其中;
通過實現Runnable接口,實例化Thread類;
(1)、繼承Thread類
/*** 繼承Thread類,我們相當于拿出三件事:即三個賣票5張的任務分別分給三個窗口,* 他們各做各的事各賣各的票各完成各的任務,因為MyThread繼承Thread類,* 所以在new MyThread的時候在創建三個對象的同時創建了三個線程;* @author lmb**/ public class MyThread extends Thread{private int ticket = 5;private String name;public MyThread(String name){this.name = name;}@Overridepublic void run() {for(int i = 0 ;i < 100 ; i++) {if (this.ticket > 0) {System.out.println(this.name + "賣票 : " + ticket--);}}}public static void main(String[] args) {//new MyThread()相當于創建一個任務和一個線程,總共三個任務三個線程MyThread t1 = new MyThread("一號窗口");MyThread t2 = new MyThread("二號窗口");MyThread t3 = new MyThread("三號窗口");t1.start();t2.start();t3.start();}/*某次運行結果:二號窗口賣票 : 5二號窗口賣票 : 4二號窗口賣票 : 3二號窗口賣票 : 2二號窗口賣票 : 1一號窗口賣票 : 5一號窗口賣票 : 4一號窗口賣票 : 3一號窗口賣票 : 2一號窗口賣票 : 1三號窗口賣票 : 5三號窗口賣票 : 4三號窗口賣票 : 3三號窗口賣票 : 2三號窗口賣票 : 1*/}(2)、實現Runnable接口
/*** 實現Runnable接口, 相當于是拿出一個賣票5張的任務給三個人去共同完成,* new MyThread2相當于創建一個任務,然后實例化三個Thread,創建三個線程即安排三個窗口去執行。* @author lmb**/ public class MyThread2 implements Runnable{private int ticket = 5;@Overridepublic void run() {for (int i = 0 ;i < 100; i ++) {if (this.ticket > 0) {System.out.println(Thread.currentThread().getName() + "賣票 : " + ticket--);}}}public static void main(String[] args) {MyThread2 t = new MyThread2();//一個任務//三個線程Thread t1 = new Thread(t, "一號窗口");Thread t2 = new Thread(t, "二號窗口");Thread t3 = new Thread(t, "三號窗口");t1.start();t2.start();t3.start();}/*某次運行結果:一號窗口賣票 : 5二號窗口賣票 : 5三號窗口賣票 : 4三號窗口賣票 : 1二號窗口賣票 : 2一號窗口賣票 : 3*/}2、 Runnable接口和Thread之間的聯系:
查看JDK源碼中Thread的實現我們發現Thread類也是Runnable接口的子類。
public class Thread extends Object implements Runnable3、兩種實現方式的區別和聯系:
在程序開發中只要是多線程肯定永遠以實現Runnable接口為主,因為實現Runnable接口相比繼承Thread類有如下好處:
避免單繼承的局限,一個類可以實現多個接口。
適合于資源的共享(多個線程實現單個任務的資源)
4、run()方法和start()方法
public class ThreadRunableTest extends Thread { private int ticket = 5; private String name;public ThreadRunableTest(String name){this.name = name;}public void run() { for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println(this.name + " 賣票:ticket="+this.ticket--); } } }public static void main(String[] args) { //***************單任務**********************ThreadRunableTest th = new ThreadRunableTest("買票窗口"); // th.run();System.out.println("******************************"); // th.start(); /*單線程單任務看不出區別,某次運行結果均如下:* 買票窗口 賣票:ticket=5買票窗口 賣票:ticket=4買票窗口 賣票:ticket=3買票窗口 賣票:ticket=2買票窗口 賣票:ticket=1*///******************多任務*******************ThreadRunableTest t11 = new ThreadRunableTest("一號窗口"); ThreadRunableTest t22 = new ThreadRunableTest("二號窗口"); ThreadRunableTest t33 = new ThreadRunableTest("三號窗口"); //***********三個線程執行三個任務順序執行*************t11.run();t22.run();t33.run();/*某次結果* 一號窗口 賣票:ticket=5一號窗口 賣票:ticket=4一號窗口 賣票:ticket=3一號窗口 賣票:ticket=2一號窗口 賣票:ticket=1二號窗口 賣票:ticket=5二號窗口 賣票:ticket=4二號窗口 賣票:ticket=3二號窗口 賣票:ticket=2二號窗口 賣票:ticket=1三號窗口 賣票:ticket=5三號窗口 賣票:ticket=4三號窗口 賣票:ticket=3三號窗口 賣票:ticket=2三號窗口 賣票:ticket=1*/System.out.println("**************************************************");//***********三個線程執行三個任務交互執行************* // t11.start(); // t22.start(); // t33.start(); /*某次結果二號窗口 賣票:ticket=5一號窗口 賣票:ticket=5二號窗口 賣票:ticket=4一號窗口 賣票:ticket=4三號窗口 賣票:ticket=5一號窗口 賣票:ticket=3二號窗口 賣票:ticket=3一號窗口 賣票:ticket=2三號窗口 賣票:ticket=4一號窗口 賣票:ticket=1二號窗口 賣票:ticket=2二號窗口 賣票:ticket=1三號窗口 賣票:ticket=3三號窗口 賣票:ticket=2三號窗口 賣票:ticket=1*/} }總結:
從上面的方法我們可以看出: Runable只有run()方法,Thread既有run()方法,又有start()方法。 run()方法執行任務是順序執行,一個任務完成之后在進行下一個; start()方法執行任務可以實現多線程任務的交互執行。
總結
以上是生活随笔為你收集整理的【Java线程】Thread Runnable必知必会的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人才招聘网站
- 下一篇: 【Java并发编程】java并发框架Ex