Java多線中基礎知識整理
阿新 • • 發佈:2019-02-20
-a sys info 局部變量 ring star start ktr 自動獲取
Java中的兩種線程:
- 守護線程:主線程停止後,守護線程會立即停止(例如:GC線程),Java中使用setDaemon(true)方法來設置為守護線程。
- 用戶線程:用戶自定義的線程,當主線程停止後,用戶不會立即停止。
Java中多線程的幾個相關狀態:
新建狀態、就緒狀態(調用start方法後)、運行狀態、阻塞狀態及死亡狀態。
Java多線程中常用的方法:
join():將執行權讓給被調用方。
setPriority():設置獲取CPU調度優先級。
yield():放棄當前CUP執行權,和其他線程在一次競爭CPU使用權。
Java多線程中鎖的分類:
內置鎖:每一個對象中都可以用來實現同步的鎖。特點:1.當程序進入同步代碼快時自動獲取鎖,程序執行完畢後或者有異常拋出時自動釋放鎖。2.該鎖是互斥鎖。3.使用synchronized修飾。
註意:1.同步方法使用的是this鎖。2.靜態同步函數采用的鎖是字節碼文件對象(類.class)。
Java多線程解決方案:
ThreadLocal:為每個線程提供一個自己的局部變量。
=================================================================================
多線程使用不當導致的問題集錦:
1.當在使用多線程時,線程間同時對某個共享的全局變量或者靜態變量進行寫操作時,將會發生數據沖突問題。
eg:
1 @SuppressWarnings("static-access")2 public class MultiThread implements Runnable { 3 4 private Integer count = 100; 5 6 @Override 7 public void run() { 8 9 while(count > 0) { 10 try { 11 Thread.currentThread().sleep(100); 12 } catch (InterruptedException e) {13 e.printStackTrace(); 14 } 15 sale(); 16 } 17 } 18 19 private void sale() { 20 if(count > 0) { 21 System.out.println("第" + (100 - count + 1) + "張票售出"); 22 count--; 23 } 24 } 25 26 public static void main(String[] args) { 27 28 MultiThread multiThread = new MultiThread(); 29 30 Thread m1 = new Thread(multiThread, "1號窗口"); 31 Thread m2 = new Thread(multiThread, "2號窗口"); 32 33 m1.start(); 34 m2.start(); 35 } 36 37 }
Java多線中基礎知識整理