寫在前面
今天照例學Java,看到了多線程的知識,跟着視訊巧了兩個例子,發現了成員變量和局部變量在多線程裡面的影響是不同的。
寫在中間
我是用Runnable接口來做的多線程
例子如下
1、模拟12306搶票
Code
package com.xq.thread.runnable;
public class Web12306 implements Runnable {
private int ticketNums = 20; 🐷
@Override
public void run() {
while(true){
if(ticketNums <= 0){
break;
}else {
System.out.println(Thread.currentThread().getName() + "---> " + ticketNums--);
}
}
}
public static void main(String[] args) {
Web12306 web = new Web12306();
new Thread(web,"大全").start();
new Thread(web,"大圈").start();
new Thread(web,"大券").start();
}
}
🐷處的
ticketNums
是成員變量
我們建立了一個實作類對象web
然後用了三個匿名代理對象去啟動線程
輸出的結果是:
大圈---> 19
大券---> 18
大全---> 20
大全---> 15
大券---> 16
大券---> 13
大券---> 12
大券---> 11
大券---> 10
大圈---> 17
大圈---> 8
大圈---> 7
大圈---> 6
大圈---> 5
大圈---> 4
大圈---> 3
大圈---> 2
大圈---> 1
大券---> 9
大全---> 14
Process finished with exit code 0
從20到1一共20次輸出
2、模拟龜兔賽跑
Code
package com.xq.thread.runnable;
/**
* 模拟龜兔賽跑
*/
public class Racer implements Runnable{
private String winner;
@Override
public void run() {
for (int i = 0; i <= 20; i++) {
System.out.println(Thread.currentThread().getName() + "--->" + i);
boolean flag = getOver(i);
if(flag){
break;
}
}
}
public boolean getOver(int i){
if(winner != null){
return true;
}else if(i == 20) {
winner = Thread.currentThread().getName();
System.out.println("GameOver,winner:" + winner);
return true;
}else {
return false;
}
}
public static void main(String[] args) {
Racer r = new Racer();
new Thread(r,"烏龜").start();
new Thread(r,"兔子").start();
}
}
這裡的i在
run()
方法的内部,屬于局部變量
輸出:
烏龜--->0
兔子--->0
烏龜--->1
烏龜--->2
兔子--->1
烏龜--->3
兔子--->2
烏龜--->4
兔子--->3
烏龜--->5
兔子--->4
烏龜--->6
兔子--->5
烏龜--->7
烏龜--->8
兔子--->6
烏龜--->9
兔子--->7
烏龜--->10
兔子--->8
烏龜--->11
兔子--->9
烏龜--->12
兔子--->10
烏龜--->13
兔子--->11
烏龜--->14
兔子--->12
烏龜--->15
兔子--->13
烏龜--->16
烏龜--->17
兔子--->14
烏龜--->18
兔子--->15
兔子--->16
烏龜--->19
兔子--->17
烏龜--->20
兔子--->18
GameOver,winner:烏龜
Process finished with exit code 0
兔子和烏龜各自都跑了一遍1到20
寫在後面
可以看出來
成員變量:每一個線程共享使用一個變量
局部變量:每一個線程都有自己的備份,互不幹擾
這是我胡亂猜的,等我入門多線程再來看看應該怎麼正确了解🙃
另外在搜資料的時候發現了大佬的博文,我看的教程裡面老師的确說Runnable資源共享比較厲害,這就存一下大神的博文:click
EOF