————MultiThread.java————
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
//new Thread(mt).start(); //創(chuàng)建多個(gè)同樣的線程訪問同一個(gè)變量index,若MyThread采用繼承Thread方式,則無法共享同一個(gè)變量。
//new Thread(mt).start();
//new Thread(mt).start();
//new Thread(mt).start();
mt.getThread().start(); //也可以采用內(nèi)部類的方式共享訪問同一個(gè)變量。
mt.getThread().start();
mt.getThread().start();
mt.getThread().start();
//mt.setDaemon(true);//設(shè)定為后臺(tái)線程,main進(jìn)程結(jié)束時(shí),后臺(tái)進(jìn)程也跟著結(jié)束。
//mt.setPriority(Thread.MAX_PRIORITY); //設(shè)定線程優(yōu)先級,MAX_PRIORITY為10,MIN_PRIORITY為1,NORM_PRIORITY為5。
//設(shè)定為最高優(yōu)先級后,程序運(yùn)行時(shí),mt線程一直運(yùn)行,強(qiáng)制終止時(shí),main線程才運(yùn)行。
//設(shè)定為最高優(yōu)先級的線程,無論有無yield();,線程總一直運(yùn)行,直到強(qiáng)制終止時(shí),main和mt線程交替運(yùn)行。
//mt.start();
int index=0;
while(true) //顯示結(jié)果與教程不同。
{
// if(index++==100)
// break;
System.out.println("main:"+Thread.currentThread().getName()); //獲取線程名字。
}
}
}
class MyThread //implements Runnable //extends Thread //使用外部類的方式。
//使用內(nèi)部類完成使用Runnable接口才能完成的兩個(gè)功能a,創(chuàng)建多個(gè)線程b,訪問同一個(gè)變量。
{
int index=0;
private class InnerThread extends Thread //不想讓外部訪問其實(shí)現(xiàn)方法,加上private。
{
public void run()
{
while(true)
{
System.out.println(Thread.currentThread().getName()+":"+index++);
}
}
}
Thread getThread()
{
return new InnerThread();
}
/*
public void run()
{
while(true)
{
System.out.println(Thread.currentThread().getName()+":"+index++);
//yield(); //允許當(dāng)前線程停止,轉(zhuǎn)去執(zhí)行其他線程,靜態(tài)方法。
//mt進(jìn)程執(zhí)行時(shí),切換到main進(jìn)程,main進(jìn)程執(zhí)行一段時(shí)間后。
//切換進(jìn)程到mt,mt執(zhí)行完獲取名字后,返回到main進(jìn)程。
}
}
*/
}
//一個(gè)長時(shí)間處于等待狀態(tài)的線程也有可能被線程調(diào)度器調(diào)度,從而運(yùn)行。
//打破高優(yōu)先級線程始終獲有運(yùn)行時(shí)間的狀態(tài)。
//如果不需要修改Thread類的除了run方法外的其他方法,選用implements Runnable。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |