Java中的多線程
經常聽到StringBuffer是線程安全的,String是線程不安全的,可是什么是線程安全呢,什么是線程不安全呢,這些困擾了我們這么久
,在高并發情況下,我們要注意線程安全,全局變量一般都是線程不安全,而局部變量一般都是安全的看代碼
package org.thread;
public class Count {
private int num =0;
public void getCount() {
for (int i = 0; i <= 100; i++) {
num += i;
}
System.out.println(Thread.currentThread().getName() + "============"
+ num);
}
}
這個方法是一個計數的方法,我希望他每次返回都是5050
package org.thread;
public class ThreadTest {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
Count count = new Count();
@Override
public void run() {
count.getCount();
}
};
for(int i = 0;i<=100;i++){
new Thread(runnable).start();
}
}
}
這個是線程的測試類,線程啟動我希望他每次拿到都是5050
看結果
Thread-0============5050 Thread-2============10100 Thread-4============19336 Thread-9============39536 Thread-8============44586 Thread-6============49636 Thread-11============59736 Thread-3============24386 Thread-1============19336 Thread-15============64786 Thread-7============29436 Thread-12============54686 Thread-5============34486
Thread-0============5050這個 這有這個是我想要的,其他數據都是多余的
那么現在我想得到5050 有幾種方式
第一種
public class Count {
public void getCount() {
int num =0;
for (int i = 0; i <= 100; i++) {
num += i;
}
System.out.println(Thread.currentThread().getName() + "============"
+ num);
}
}
把
private int num =0;設置成內部變量也就是在getCount方法中
得到的結果
Thread-0============5050 Thread-1============5050 Thread-6============5050 Thread-2============5050 Thread-3============5050 Thread-10============5050 Thread-8============5050 Thread-7============5050 Thread-5============5050 Thread-4============5050 Thread-9============5050
這個是我想要的
還有一種就是
Runnable runnable = new Runnable() {
@Override
public void run() {
Count count = new Count();
count.getCount();
}
};
把
Count count = new Count();放到run方法中,每次都創建
這種方法消耗內存性能,不提倡
得到的結果
Thread-0============5050 Thread-1============5050 Thread-6============5050 Thread-2============5050 Thread-3============5050 Thread-10============5050 Thread-8============5050 Thread-7============5050 Thread-5============5050 Thread-4============5050 Thread-9============5050
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!