歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java多線程從簡單到復雜

Java多線程從簡單到復雜

日期:2017/3/1 9:42:00   编辑:Linux編程

1 輸出數字

(1) 多線程操作全局變量任務

package c;
/**
* @author ZTX
* (1) 多線程操作全局變量任務
* 2013-12-14 21:49:17
*
*
*/
public class MyThread implements Runnable
{
private static int i=0;
public MyThread(){

}
@Override
public void run(){
i++;
System.out.println("i="+i);
}
}

(2) 為這個任務開三個線程

private static void testImport3() {
MyThread imp=new MyThread();
Thread t;
for(int i=0;i<3;i++){//開3個線程
t=new Thread(imp);
t.start();
}
}

(3) 輸出結果

i=2
i=3
i=2

2 同步

避免一個數字拿出來處理前被另一個線程拿出來,兩個線程處理之後返回了同一種結果(本應該是兩種)

(1) 加鎖

package c;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
* @author ZTX
* (1) 多線程操作全局變量
* 2013-12-14 21:49:17
* (2) 同步
* 2013-12-14 22:12:19
*
*/
public class MyThread implements Runnable
{
private static int i=0;
public MyThread(){

}
private static Lock lock=new ReentrantLock();
@Override
public void run(){
lock.lock();
try {
i++;
System.out.println("i="+i);
} catch (Exception e) {
e.printStackTrace();
}finally{
lock.unlock();
}
}
}

(2)增加線程數驗證同步

private static void testImport3() {
MyThread imp=new MyThread();
Thread t;
for(int i=0;i<30;i++){//開3個線程
t=new Thread(imp);
t.start();
}
}

(3)輸出結果

i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
i=11
i=12
i=13
i=14
i=15
i=16
i=17
i=18
i=19
i=20
i=21
i=22
i=23
i=24
i=25
i=26
i=27
i=28
i=29
i=30

3

4

5

Java1.5後的多線程框架 http://www.linuxidc.com/Linux/2014-02/96879.htm

Java多線程和同步的理解 http://www.linuxidc.com/Linux/2013-12/93691.htm

Java中兩種實現多線程方式的對比分析 http://www.linuxidc.com/Linux/2013-12/93690.htm

Java利用多線程計算目錄數據大小 http://www.linuxidc.com/Linux/2013-09/90715.htm

Java多線程向數據庫寫入數據 http://www.linuxidc.com/Linux/2013-09/90297.htm

Java多線程經典案例 http://www.linuxidc.com/Linux/2014-06/103458.htm

Copyright © Linux教程網 All Rights Reserved