老师,这不能同步吗?
package com.practice1;
/**
* @author 谭昌
* @date 2021/4/18
*/
class MyThread extends Thread{
@Override
public synchronized void run() {
for (int i = 1; i <10; i++) {
System.out.println(getName()+"正在执行"+i+"次!");
}
}
}
public class JoinDemo {
public synchronized static void main(String[] args) {
Thread t = new MyThread();
t.start();
/*try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}*/
for (int i = 1; i < 10; i++) {
System.out.println("主线程运行第"+ i + "次!");
}
System.out.println("主线程结束!");
}
}
17
收起
正在回答 回答被采纳积分+1
2回答
好帮手慕阿满
2021-04-20 11:03:11
同学你好,在同学的代码中,是创建了两个MyThread类对象,这两个对象分别持有MyThread类的锁,互不影响,所以线程不能同步。

如果同学想要两个线程同步,应该创建一个MyThread类对象,然后根据这个对象创建两个线程,这样就可以同步,如:
public class Test {
public static void main(String[] args) {
// Thread t = new MyThread("tc1");
// t.start();
// t = new MyThread("tc2");
// t.start();
Thread t = new MyThread();
Thread t1 = new Thread(t,"tc1");
Thread t2 = new Thread(t,"tc2");
t1.start();
t2.start();
}
}
class MyThread extends Thread {
// private String name;
//
// public MyThread(String name) {
// this.name = name;
// }
@Override
public synchronized void run() {
for (int i = 1; i < 50; i++) {
System.out.println(Thread.currentThread().getName() + "正在执行" + i + "次!");
}
}
}祝学习愉快~
java工程师2020版
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程

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