创建3个线程Thread1、Thread2、Thread3,要求三个线程依次对一个数字进行递减操作,当数字减到0时结束。
package Ch04HomeWork;
public class DecreasingTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
DecreasingThread s = new DecreasingThread();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);
Thread t3 = new Thread(s);
t1.start();
t2.start();
t3.start();
}
}
class DecreasingThread implements Runnable{
private int number = 100;
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
synchronized (this) {
if(number>0){
System.out.println(Thread.currentThread().getName() + " is Decreasing " + number--);
}else break;
}
}
}
}
这段代码展示了一个使用多线程的案例,其中有三个线程共同降低一个初始值为 100 的变量,并通过同步机制来确保线程安全。
-
DecreasingTest
类中的main
方法创建了一个DecreasingThread
实例s
。 -
创建了三个线程
t1
、t2
和t3
,它们都共享同一个s
实例。 -
启动这三个线程,它们会同时运行
run
方法。 -
在
DecreasingThread
类中,run
方法实现了多线程任务。 -
使用一个无限循环,线程会不断尝试降低
number
的值。 -
使用
synchronized (this)
块来确保线程安全。这意味着在同一时间只有一个线程可以进入这个块,避免了多个线程同时操作number
导致的问题。 -
在
synchronized
块内,首先检查number
是否大于 0,如果是,则输出当前线程名和number
值,然后number
减一。如果number
小于等于 0,则退出循环。
总体来说,这段代码展示了如何使用多线程和同步机制来共享一个变量,并确保多个线程对该变量的操作是安全的。每个线程通过同步块来控制对 number
的访问,以避免竞争条件。