1. 程式人生 > >Java基礎學習 —— 線程

Java基礎學習 —— 線程

get one runnable demo1 創建 new 自定義 pri wait方法

線程:

多線程的好處:解決了在一個進程中同時執行多個任務代碼的問題。

自定義線程的創建方式:

1.自定一個類繼承thread類,重寫thread的run方法 吧自定義線程的任務代碼寫在run方法內,創建thread子類的對象並且調用start()方法啟動線程。

2.自定義一個類實現runnable接口,實現runnable接口中run方法,吧自定義線程的任務代碼寫在run方法內部,創建runnable實現類的對象 ,創建thread對象並且把runnable實現類的對象作為參數傳遞,調用thread對象的start方法開啟線程。
線程安全問題出現的根本原因:
必須存在著兩個或者兩個以上的線程共享一個資源。
操作共享資源的代碼必須有兩句或者有兩句以上
線程安全問題的解決方案:
同步代碼塊解決
synchronized(鎖){
需要被同步的代碼
}
同步行數解決:
修飾符 synchronized 函數名(形參列表。。。){
}

 1 public class demo1 extends Thread{
 2     
 3     public demo1(String name) {
 4         super(name);
 5     }
 6     public void run() {
 7         for (int i = 0; i < 50; i++) {
 8             System.out.println(Thread.currentThread().getName()+":"+i);
 9         }
10     }
11     public static
void main(String[] args) { 12 demo1 demo1 = new demo1("sony"); 13 demo1.start(); 14 for (int i = 0; i < 50; i++) { 15 System.out.println(Thread.currentThread().getName()+":"+i); 16 } 17 } 18 }
技術分享
sony:0
main:0
sony:1
main:1
sony:2
main:2
sony:3
sony:4
main:
3 sony:5 main:4 sony:6 main:5 sony:7 main:6 sony:8 sony:9 sony:10 sony:11 sony:12 sony:13 sony:14 sony:15 sony:16 sony:17 sony:18 sony:19 sony:20 sony:21 sony:22 sony:23 sony:24 main:7 sony:25 main:8 sony:26 main:9 sony:27 main:10 sony:28 main:11 sony:29 main:12 sony:30 main:13 main:14 sony:31 main:15 sony:32 main:16 sony:33 main:17 main:18 sony:34 main:19 main:20 sony:35 main:21 sony:36 sony:37 sony:38 main:22 sony:39 main:23 sony:40 main:24 main:25 main:26 sony:41 main:27 sony:42 main:28 sony:43 main:29 sony:44 main:30 sony:45 main:31 sony:46 main:32 sony:47 main:33 sony:48 main:34 sony:49 main:35 main:36 main:37 main:38 main:39 main:40 main:41 main:42 main:43 main:44 main:45 main:46 main:47 main:48 main:49
View Code

註意事項:
同步代碼塊的鎖 可以是任意的對象。但是同步鎖對象必須是多線程共享的對象,否則鎖不住。
同步函數的鎖 是固定的 非靜態函數的鎖對象是 this對象,靜態函數的鎖對象時 class對象。
在同步代碼塊或同步函數中調用sleep方法是不會釋放鎖對象的。如果調用的wait方法是會釋放鎖對象的。

Java基礎學習 —— 線程