java新手,试着理解下面的多线程程序。任何帮助表示赞赏!!
以下程序输出8。
当t1开始并进入run方法时,到运行时,计数值为4。
现在当t2进入run方法时。我很困惑为什么'i'的值不是5,但是count变量是4?由于t1和t2共享共同对象“pt”,因此不应该t2从t1左侧获取所有值。我很迷惑?为什么count和i变量的处理方式不同?
public class JavaProgramming {
public static void main(String[] args) throws InterruptedException {
ProcessingThread pt = new ProcessingThread();
Thread t1 = new Thread(pt, "t1");
t1.start();
t1.join();
Thread t2 = new Thread(pt, "t2");
t2.start();
t2.join();
System.out.println("Processing count=" + pt.getCount());
}
}
class ProcessingThread implements Runnable {
private int count;
@Override
public void run() {
for (int i = 1; i < 5; i++) {
processSomething(i);
count++;
}
}
public int getCount() {
return this.count;
}
private void processSomething(int i) {
// processing some job
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
每次运行循环时都会创建新i
,同时您明确指定i=1
,因此第二次运行时i
不能为5,它甚至不存在循环之前和之后(唯一的时间i
是5就在循环结束之前)
第一次执行run
时,循环体执行4次(i = 1,2,3,4 = 4次),这就是count
增加4次的原因,这就是为什么它是4
答案 1 :(得分:1)
您的Expected output:
tableData = [
{ id: 5, name: 'kumar', startDate: '04/05/2018', endDate: '05/05/2018', startTime: ’01:22pm’, endTime: ’01:33’ city: 'los angeles', country: 'us'},
{ id: 4, name: 'vishal', startDate: '04/05/2018', endDate: '05/05/2018', startTime: ’01:22pm’, endTime: ’01:33’, city: 'los angeles', country: 'us'},
{ id: 2, name: 'dinesh', startDate: '04/05/2018', endDate: '05/05/2018', startTime: ’01:22pm’, endTime: ’01:33’, city: 'los angeles', country: 'us'}
]
方法在每个帖子中经历了4次,而不是5次,即 以下run()
的值。由于i : 1, 2, 3, 4
上的退出条件为for loop
,而非i<5
,因此第五次输入i<=5
时,由于条件for loop
不再符合, i<5
会立即退出。