正在回答 回答被采纳积分+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(); } }
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星