1. 程式人生 > >記錄一下手上專案編寫過程遇到的坑

記錄一下手上專案編寫過程遇到的坑

一、全域性變數多執行緒訪問遇到的坑。

定義了一個全域性變數,第一個子執行緒一直判斷這個變數是否滿足條件,第二個執行緒用來改變這個變數的值。

	int isRun=20;
	private void threadOne(){
		new Thread(){
			public void run() {
				for (int i = 0; i < 1;) {
					if (isRun!=20) {
						break;
					}
				}
			};
		}.start();
	}
	private void threadTwo(){
		new Thread(){
			public void run() {
				isRun=30;
			};
		}.start();
	}

在某些手機上,isRun引數發生改變後 ,threadOne()方法裡面的isRun不一定會及時更新。問了幾個大神,原來執行緒會建立變數副本,所以全域性變數isRun發生了改變,threadOne()方法裡面的值沒有和全域性變數isRun同步。

解決辦法:

1、把變數isRun封裝成物件。測試發現可行

2、在判斷之前加點延時,

try {
	Thread.sleep(2);
} catch (InterruptedException e) {
}
if (isRun!=20) {
	break;
}
測試結果:可行。但是不知道應該設定多少延時為好。