- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- Java多線(xiàn)程之線(xiàn)程的創(chuàng )建
Thread
類(lèi)run()
方法,編寫(xiě)線(xiàn)程執行體(當成main()
方法用)start()
方法啟動(dòng)線(xiàn)程//主方法 public class Demo01 { public static void main(String[] args) { Thread1 thread1 = new Thread1(); Thread2 thread2 = new Thread2(); thread1.start(); thread2.start(); } } //100以?xún)鹊呐紨? class Thread1 extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { if (i%2==0){ System.out.println(Thread.currentThread().getName() + ":" + i); } } } } //100以?xún)鹊钠鏀? class Thread2 extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { if (i%2!=0){ System.out.println(Thread.currentThread().getName() + ":" + i); } } } }
public class Demo02 { public static void main(String[] args) { //打印0~100內的偶數 new Thread(){ @Override public void run() { for (int i = 0; i < 100; i++) { if (i%2==0){ System.out.println(Thread.currentThread().getName() + ":" + i); } } } }.start(); //打印0~100內的奇數 new Thread(){ @Override public void run() { for (int i = 0; i < 100; i++) { if (i%2!=0){ System.out.println(Thread.currentThread().getName() + ":" + i); } } } }.start(); } }
public class Test { public static void main(String[] args) { Window w1 = new Window("窗口 1 "); Window w2 = new Window("窗口 2 "); Window w3 = new Window("窗口 3 "); w1.start(); w2.start(); w3.start(); } } class Window extends Thread{ //這里票的數量應該是靜態(tài)變量,否則每個(gè)對象創(chuàng )建后都有100張票,而不是總共100張票 private static int tickets = 100; public Window(String name) { super(name); } @Override public void run() { while (tickets > 0){ tickets--; System.out.println(getName() + "賣(mài)出了一張票,剩余票數:" + tickets); } } }
start()
方法的作用:通過(guò)調用自己寫(xiě)的線(xiàn)程類(lèi)對象的start()
方法,來(lái)啟動(dòng)該線(xiàn)程,并調用該線(xiàn)程的run()
方法run()
方法的方式啟動(dòng)線(xiàn)程start()
的線(xiàn)程再次star()
來(lái)同時(shí)跑兩個(gè)線(xiàn)程??梢酝ㄟ^(guò)新建一個(gè)該線(xiàn)程類(lèi)的對象,然后在對新建的對象start()
run()
方法main()
使用)join()
,此時(shí)線(xiàn)程a就進(jìn)入阻塞狀態(tài),直到線(xiàn)程b完全執行完之后,線(xiàn)程a在結束阻塞狀態(tài)
Runnable
接口的類(lèi)Runnable
接口中的抽象方法:run()
Thread
類(lèi)的構造器中,創(chuàng )建Thread
類(lèi)的對象Thread
類(lèi)的對象調用start()
start()
首先啟動(dòng)了當前的線(xiàn)程,然后調用了Runnable
類(lèi)型的target的run()
開(kāi)發(fā)中,優(yōu)先選擇實(shí)現Runnable接口的方式創(chuàng )建線(xiàn)程
原因:
聯(lián)系:Thread類(lèi)本身也實(shí)現了Runnable接口
相同點(diǎn):兩種方式都需要重寫(xiě)run()
方法,將線(xiàn)程要執行的邏輯聲明在run()
方法中
調度策略
線(xiàn)程的優(yōu)先級分為1~10十個(gè)檔,其中:
NORM_PRIORITY
:5 —— 普通優(yōu)先級,即默認的優(yōu)先級MAX_PRIORITY
:10 —— 最高優(yōu)先級MIN_PRIORITY
:1 —— 最低優(yōu)先級getPriority()
:獲取線(xiàn)程的優(yōu)先級setPriority(int p)
:設置線(xiàn)程的優(yōu)先級注意:高優(yōu)先級的線(xiàn)程要搶占低優(yōu)先級線(xiàn)程CPU的執行權。但是只是從概率上來(lái)講,高優(yōu)先級的線(xiàn)程高概率的情況下被執行。并不意味著(zhù)只有當高優(yōu)先級的線(xiàn)程被執行完以后,低優(yōu)先級的線(xiàn)程才會(huì )被執行。
線(xiàn)程開(kāi)啟后不一定立即執行,有CPU進(jìn)行調度(如果只有一個(gè)CPU,主線(xiàn)程和創(chuàng )建的線(xiàn)程會(huì )交替執行)
到此這篇關(guān)于Java多線(xiàn)程之線(xiàn)程的創(chuàng )建的文章就介紹到這了,更多相關(guān)Java線(xiàn)程的創(chuàng )建內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2