设计4个线程主线程中启动它们,其中两个线程每次对j增加1,另外两个线程对j每次减少1。 * 主线程启动4个子线程后,休眠1秒钟,停止4个子线程。输出一下j的值看看是多少。
时间: 2024-09-08 13:01:08 浏览: 44
这个问题描述了一个典型的多线程同步问题。在Java中,可以使用`Thread`类和同步机制来实现这个需求。下面是一个简单的实现方案:
```java
public class ThreadDemo {
private int j = 0;
public synchronized void increment() {
j++;
}
public synchronized void decrement() {
j--;
}
public int getJ() {
return j;
}
public static void main(String[] args) {
final ThreadDemo demo = new ThreadDemo();
Runnable task = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
demo.increment();
demo.decrement();
}
}
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
Thread t3 = new Thread(task);
Thread t4 = new Thread(task);
t1.start();
t2.start();
t3.start();
t4.start();
try {
Thread.sleep(1000); // 主线程休眠1秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
// 停止线程的方法可以有多种,这里我们简单地使用isInterrupted来检查线程是否已被中断
t1.interrupt();
t2.interrupt();
t3.interrupt();
t4.interrupt();
System.out.println("j的值是:" + demo.getJ());
}
}
```
在这个例子中,`increment`和`decrement`方法都被声明为同步的(synchronized),这样可以确保当一个线程在修改`j`的值时,没有其他线程可以同时修改它。这样可以避免多线程同时访问共享资源导致的并发问题。
主线程在启动所有子线程后休眠1秒钟,然后尝试停止这些线程。这里简单地使用了中断(interrupt)方法来通知线程停止执行,但这并不是一种强制停止线程的方法,而是一种协作式的线程停止方式。如果线程中运行的代码在检测到中断信号后能够响应中断并退出,那么线程就会停止。否则,线程会继续执行,直到它的运行逻辑结束。
最后,主线程输出共享变量`j`的值。
阅读全文