合格程序員要敲多少行代碼?多線程會共同使用一組計算機上的CPU,而線程數大于給程序分配的CPU數量時,為了各個線程都有執行的機會,就需要輪換使用CPU,不同的線程切換使用CPU發生的切換數據就是上下文切換,下面我們就來說一說關于合格程序員要敲多少行代碼?我們一起去了解并探讨一下這個問題吧!
多線程會共同使用一組計算機上的CPU,而線程數大于給程序分配的CPU數量時,為了各個線程都有執行的機會,就需要輪換使用CPU,不同的線程切換使用CPU發生的切換數據就是上下文切換。
二、死鎖問題死鎖是指兩個或兩個以上的線程在執行過程中,因争奪資源而造成的一種互相等待的現象,若無外力作用,它們都無法執行下去。産生死鎖的必要條件:
任務或者執行者都沒有被阻塞,由于某些條件沒有滿足,導緻一直重複嘗試,失敗,嘗試,失敗。活鎖和死鎖的區别在于,處于活鎖的實體是在不斷的改變狀态,而處于死鎖的實體表現為等待,活鎖有可能自行解開,死鎖則不能。
五、饑餓一個或者多個線程因為種種原因無法獲得所需要的資源,導緻一直無法執行的狀态。導緻饑餓的原因:
public class InterruptThreadDemo {
public static void main(String[] args) throws InterruptedException {
MyThreadDemo myThreadDemo = new MyThreadDemo();
System.out.println("===============");
Thread thread = new Thread(myThreadDemo);
thread.start();
Thread.sleep(3000);
System.out.println("Interrupt thread.." thread.getName());
thread.interrupt();
Thread.sleep(3000);
System.out.println("stopping.....");
}
}
守護線程都是為JVM中所有非守護線程的運行提供便利服務,隻要當前JVM實例中尚存在任何一個非守護線程沒有結束,守護線程就全部工作,隻有當最後一個非守護線程結束時,守護線程才會随着JVM一同結束工作。那麼如何創建守護線程呢?任何線程都可以設置為守護線程和用戶線程,通過下列方法,true則是把該線程設置為守護線程,false則是用戶線程,該方法必須在start()方法之前調用,否則運行時會抛出異常。守護線程相當于後台管理者,比如進行内存回收,垃圾清理工作。
MyThreadDemo myThreadDemo1 = new MyThreadDemo();
Thread thread1 = new Thread(myThreadDemo1);
thread1.setDaemon(true);
thread1.start();
每一個線程都是有優先級的,一般來說,高優先級的線程在運行時會具有優先權,但這依賴于線程調度的實現,這個實現是和操作系統相關的,可以定義線程的優先級,但是這并不能保證高優先級的線程會在低優先級的線程前執行,線程優先級是一個int變量從1-10,1代表最低優先級,10代表最高優先級,默認優先級是5;下面的方法是設置優先級的方法
Thread thread1 = new Thread(myThreadDemo1);
thread1.setPriority(7);
Synchronized關鍵字解決的是多個線程之間訪問資源的同步性,Synchronized關鍵字可以保證它修飾的方法或者代碼塊在任意時刻隻能有一個線程執行。
//類鎖 修飾加鎖的類
void demo4(){
//類鎖
synchronized (SynchronizedDemo.class){
System.out.println(Thread.currentThread().getName() "demo4執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//類鎖 靜态方法
synchronized static void demo2(){
System.out.println(Thread.currentThread().getName() "demo2執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//鎖的是同一個對象 修飾代碼塊,指定對象
void demo3(){
//this 代表實例 同一個實例會被鎖住
synchronized (this){
System.out.println(Thread.currentThread().getName() "demo3執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//普通方法
synchronized void demo1(){
System.out.println(Thread.currentThread().getName() "demo1執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
等等,我還有句話想說,你累嗎?我覺得今天有點累,但是累證明我還活着,說明我再上坡!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!