//线程同步问题
public class TestThread implements Runnable{
Timer timer = new Timer();
public static void main(String[] args) {
TestThread test = new TestThread();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run() {
timer.add(Thread.currentThread().getName());
}
}
class Timer {
private static int num = 0;
public void add(String name) {
num ++;
try {
Thread.sleep(1);// ---放大效果
} catch(InterruptedException e) {}
System.out.println// 可能被打断
(name + ", 你是第" + num + "个使用timer的线程");
}
}
//以下3个类相同,【运行结果】为第一个类的结果,请注释其他2个相同的类
//2,3两个类主要介绍synchronized 的使用方式
class Timer {
private static int num = 0;
public void add(String name) {
synchronized(this) { //锁定代码段
num ++;
try {
Thread.sleep(1);// ---放大效果
} catch(InterruptedException e) {}
System.out.println// 可能被打断
(name + ", 你是第" + num + "个使用timer的线程");
}
}
}
class Timer {
private static int num = 0;
public synchronized void add(String name) {//锁定过程
num ++;
try {
Thread.sleep(1);// ---放大效果
} catch(InterruptedException e) {}
System.out.println// 可能被打断
(name + ", 你是第" + num + "个使用timer的线程");
}
}
/*
运行结果
--------------------Configuration: <Default>--------------------
t1, 你是第2个使用timer的线程
t2, 你是第2个使用timer的线程
Process completed.
*/
java例程练习(多线程[线程同步问题])
最新推荐文章于 2025-08-17 15:58:09 发布
本文通过一个具体的Java示例,展示了在线程并发环境下如何利用synchronized关键字解决线程安全问题。通过对不同实现方式的对比,深入解析了synchronized的两种用法及其对线程同步的影响。
&spm=1001.2101.3001.5002&articleId=82327421&d=1&t=3&u=c99354292d754207bf8333f5107f9a4c)
330

被折叠的 条评论
为什么被折叠?



