正在回答 回答被采纳积分+1
1回答
好帮手慕小黑
2022-07-13 16:23:05
同学你好,由于同学给出的都是代码片段,老师无法给出确切的解决方案。
如果同学的代码与课程源码一致,都是有锁对象Object lock的,那么此处是可以合并到一起的。解决方式是在run方法中使用synchronized代码块,锁对象为printer.lock即可。代码如下:
public class SyncSample {
class Printer{
//锁对象
Object lock = new Object();
//synchronized代码块演示,对自定义对象lock上锁
}
class PrintTask implements Runnable{
public Printer printer;
@Override
public void run() {
synchronized (printer.lock) {
try {
//Printer.class
Thread.sleep(500);
System.out.print("魑");
Thread.sleep(500);
System.out.print("魅");
Thread.sleep(500);
System.out.print("魍");
Thread.sleep(500);
System.out.print("魉");
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void start(){
Printer printer = new Printer();
for(int i = 0 ; i < 10 ; i++){
PrintTask task = new PrintTask();
task.printer = printer;
Thread thread = new Thread(task);
thread.start();
}
}
public static void main(String[] args) {
SyncSample sample = new SyncSample();
sample.start();
}
}祝学习愉快!
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星