進(jìn)程與線程
一、線程的執(zhí)行過程
二轧铁、實(shí)現(xiàn)線程的兩種方法
1映砖、定義一個(gè)線程類,需繼承Thread類
class FirstThread extends Thread {
//必須重寫run方法潮尝,該方法稱為線程體
public void run () {
for (int i=0;i<100;i++){
System.out.println("FirstThread-->"+i);
}
}
}
class Test {
public static void main(String args[]) {
//生成一個(gè)線程類的對(duì)象
FirstThread ft = new FirstThread();
//使用start方法啟動(dòng)線程
ft.start();//ft線程處于就緒狀態(tài)
//ft.run();不能這樣運(yùn)行
for (int i=0;i<100;i++){
System.out.println("mainThread-->"+i);
}
}
}
2、實(shí)現(xiàn)Runnable接口
class RunnableImpl implements Runnable {
public void run(){
for (int i=0;i<100;i++){
System.out.println("Runnable-->"+i);
}
}
}
class Test {
public static void main(String args[]) {
//生成一個(gè)Runnable接口實(shí)現(xiàn)類的對(duì)象
RunnableImpl ri= new RunnableImpl();
//生成一個(gè)Thread對(duì)象饿序,并將Runnable接口實(shí)現(xiàn)類的對(duì)象作為參數(shù)勉失,傳遞給Thread對(duì)象
Thread t = new Thread(ri);
//使用start方法啟動(dòng)線程
t.start();//ft線程處于就緒狀態(tài)
for (int i=0;i<100;i++){
System.out.println("mainThread-->"+i);
}
}
}
三、線程的控制方法
中斷線程
Thread.sleep(); //線程休眠原探,參數(shù)為毫秒乱凿,需要捕獲異常,結(jié)束后線程進(jìn)入就緒狀態(tài)
Thread.yield(); //自動(dòng)讓出CPU,然后和其他線程一起再次搶占CPU
設(shè)置線程的優(yōu)先級(jí)咽弦,最大是10徒蟆,最小是1
getPriority();
setPriority();
Thread t = new Thread(ri);
t.setPriority(Thread.MAX_PRIORITY); //設(shè)置最大優(yōu)先級(jí) 10
t.setPriority(Thread.MIN_PRIORITY); //設(shè)置最小優(yōu)先級(jí) 1
五、多線程數(shù)據(jù)安全
class MyThread implements Runnable {
int i = 100;
public void run(){
while(true){
synchronized(this){ //同步鎖离唬,this為鎖住的對(duì)象后专,this可以是其他對(duì)象
//獲取當(dāng)前代碼運(yùn)行的線程
System.out.println(Thread.currentThread().getName()+i);
i--;
Thread.yield();
if(i<0){
break;
}
}
}
}
}
class Test {
public static void main(String args[]) {
MyThread ri= new MyThread();
//生成兩個(gè)Thread對(duì)象,這兩個(gè)Thread公用同一個(gè)線程體
Thread t1 = new Thread(ri);
Thread t2 = new Thread(ri);
t1.setName("線程a");
t2.setName("線程b");
t1.start();
t2.start();
}
}
注:如果一個(gè)線程獲得了一個(gè)對(duì)象的同步鎖输莺,那么這個(gè)對(duì)象上所有其他同步的代碼都是不能被其他線程執(zhí)行戚哎,都需要等待同步鎖釋放后才能被執(zhí)行。
同步方法
public synchronized void fun1(){
//同步方法鎖住的對(duì)象是this
}