例子很清晰,直接上代码
这段代码是一个简单的多线程同步示例,展示了如何在Java中使用多线程来共享一个计数器
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
class Worker implements Runnable {
private Counter counter;
public Worker(Counter counter) {
this.counter = counter;
}
public void run() {
for (int i = 0; i < 5; i++) {
counter.increment();
}
}
}
public class Main {
public static void main(String[] args) {
Counter counter = new Counter(); // 创建一个计数器对象
Thread thread1 = new Thread(new Worker(counter)); // 创建第一个线程,传入计数器对象
Thread thread2 = new Thread(new Worker(counter)); // 创建第二个线程,传入计数器对象
thread1.start(); // 启动第一个线程
thread2.start(); // 启动第二个线程
try {
thread1.join(); // 等待第一个线程执行完成
thread2.join(); // 等待第二个线程执行完成
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final count: " + counter.getCount()); // 输出最终计数器的值
}
}
Counter
类是一个具有计数器功能的类,其中的count
变量用于存储计数器的值。increment()
方法和getCount()
方法都使用synchronized
关键字修饰,使得它们具有同步锁的效果,确保在多线程环境下的安全访问。Worker
类实现了Runnable
接口,定义了线程的执行逻辑,在每次执行时调用计数器的increment()
方法进行计数器的增加。Main
类是程序的入口,创建一个计数器对象和两个线程对象,通过Thread
类来管理线程的执行。在主线程中使用join()
方法等待两个线程执行完成。最后输出计数器对象的最终值。