程序填空题:利用线程同步机制执行正确的计数
当用多个线程处理共享变量时,线程中对共享变量的处理代码应用同步机制进行保护,才能保证处理的正确性。
java
import java.util.*;
class BackCounter implements Runnable{
private int count=100; //线程共享变量,对它的处理必须用同步机制进行保护
public int getCount() { return count; }//返回变量值
//线程体
public void run() {
for(int i=10;i>0;i--) { //变量值递减 10
{ //以下代码在处理共享变量,需要同步机制保护
if( count<=0 ) break;
count--;
}
try { Thread.sleep(10); } catch ( InterruptedException e ) { }//模拟延时 10 毫秒
}
}//线程体结束
}
public class Main {
public static void main(String[] args) throws InterruptedException {//某些线程方法会抛出检查型异常
ArrayList<Thread> lt=new ArrayList<Thread>();
BackCounter bc=new BackCounter();//创建实现类对象
lt.add(new Thread(bc));//创建线程对象
lt.add(new Thread(bc));
for (Thread th:lt) ; //启动线程
for (Thread th:lt) ; //等待线程结束
System.out.println(bc.getCount());
}
}
答案:
第1空:synchronized(this)
第2空:th.start()
第3空:th.join()
java
import java.util.*;
class BackCounter implements Runnable{
private int count=100; //线程共享变量,对它的处理必须用同步机制进行保护
public int getCount() { return count; }//返回变量值
//线程体
public void run() {
for(int i=10;i>0;i--) { //变量值递减 10
{ //以下代码在处理共享变量,需要同步机制保护
if( count<=0 ) break;
count--;
}
try { Thread.sleep(10); } catch ( InterruptedException e ) { }//模拟延时 10 毫秒
}
}//线程体结束
}
public class Main {
public static void main(String[] args) throws InterruptedException {//某些线程方法会抛出检查型异常
ArrayList<Thread> lt=new ArrayList<Thread>();
BackCounter bc=new BackCounter();//创建实现类对象
lt.add(new Thread(bc));//创建线程对象
lt.add(new Thread(bc));
for (Thread th:lt) ; //启动线程
for (Thread th:lt) ; //等待线程结束
System.out.println(bc.getCount());
}
}
答案:
第1空:synchronized(this)
第2空:th.start()
第3空:th.join()