本题目要求t1线程打印完后,才执行主线程main方法的最后一句System.out.println(Thread.currentThread().getName()+" end"); public
时间: 2024-11-17 11:30:09 浏览: 26
这个题目的要求是在Java中使用synchronized关键字或者wait()和notifyAll()机制保证线程安全。你需要创建一个名为`t1`的线程,让它先完成某些任务,比如在一个循环或阻塞操作中。主线程`main`启动`t1`线程后,并不会立即继续执行最后一句输出语句,而是等待`t1`线程结束。
下面是一个简单的示例,使用`synchronized`块来实现这种同步:
```java
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (this) { // 使用当前对象作为锁
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " is working...");
try {
wait(); // 主线程挂起直到t1唤醒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notifyAll(); // 唤醒主线程
}
});
t1.start(); // 启动t1线程
try {
t1.join(); // 等待t1线程结束
} catch (InterruptedException e) {
e.printStackTrace();
}
// 确保t1线程执行完毕后,主线程打印
System.out.println(Thread.currentThread().getName() + " end");
}
}
```
在这个例子中,`synchronized`块确保了对共享资源的互斥访问,`wait()`让主线程暂停直到`t1`通知它,而`notifyAll()`则是`t1`线程结束后释放锁并唤醒所有等待在该监视器上的线程。
阅读全文