下面是Java多线程程序中synchronized修饰方法的使用实例的详细攻略。
什么是多线程和synchronized?
多线程是指在同一时间内,多个线程同时执行,每个线程负责执行其中一部分代码,以达到加速程序运行的目的。
synchronized是Java中实现线程同步的关键字,它可以用来修饰方法或对象。当一个方法或一个对象被synchronized关键字修饰时,同一时间只能有一个线程执行该方法或对象,其他线程需要等待。这样可以避免线程之间的相互干扰,确保线程安全。
为什么需要在多线程程序中使用synchronized修饰方法?
在多线程程序中,当多个线程同时访问同一对象的方法时,就会出现线程安全问题。例如,在多个线程同时对同一个变量进行修改时,可能会导致变量值的不一致。
为了避免这种情况的发生,我们需要使用synchronized关键字来保证同一时间只有一个线程访问某个方法或对象。
如何使用synchronized修饰方法?
使用synchronized修饰方法的方法很简单,只需要在方法定义前面添加synchronized关键字即可。例如:
public synchronized void method() {
// 方法体
}
以上代码中,method()方法前面添加了synchronized关键字,表示在同一时间内只能有一个线程执行该方法。
示例一:使用synchronized修饰非静态方法
下面我们来看一个简单的示例,演示如何在多线程程序中使用synchronized修饰方法。
public class SynchronizedDemo {
public synchronized void method() {
for(int i =0; i<5; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
SynchronizedDemo demo = new SynchronizedDemo();
new Thread(() -> demo.method()).start();
new Thread(() -> demo.method()).start();
}
}
SynchronizedDemo类中定义了一个method()方法,并在方法前面添加了synchronized关键字,表示在同一时间内只有一个线程能够执行该方法。
main()方法中创建了两个线程,然后分别执行SynchronizedDemo对象的method()方法。由于该方法被synchronized修饰,因此同一时间内只有一个线程能够执行该方法。
执行结果如下:
Thread-0: 0
Thread-0: 1
Thread-0: 2
Thread-0: 3
Thread-0: 4
Thread-1: 0
Thread-1: 1
Thread-1: 2
Thread-1: 3
Thread-1: 4
可以看到,两个线程分别执行了method()方法,但是每次只有一个线程在执行该方法,另一个线程需要等待。
这个示例展示了如何在Java多线程程序中使用synchronized修饰非静态方法。
示例二:使用synchronized修饰静态方法
除了在非静态方法上使用synchronized修饰之外,我们还可以在静态方法上使用synchronized修饰来保证线程安全。
public class SynchronizedDemo {
public static synchronized void method() {
for(int i =0; i<5; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Thread(() -> SynchronizedDemo.method()).start();
new Thread(() -> SynchronizedDemo.method()).start();
}
}
在以上示例中,我们定义了一个静态方法method(),并在方法前面添加了synchronized关键字,表示在同一时间内只有一个线程能够执行该静态方法。
main()方法中创建了两个线程,然后分别执行SynchronizedDemo类的静态方法method()。由于该方法被synchronized修饰,因此同一时间内只有一个线程能够执行该方法。
执行结果如下:
Thread-0: 0
Thread-0: 1
Thread-0: 2
Thread-0: 3
Thread-0: 4
Thread-1: 0
Thread-1: 1
Thread-1: 2
Thread-1: 3
Thread-1: 4
与示例一类似,这个示例展示了如何在Java多线程程序中使用synchronized修饰静态方法。
综上所述,以上两个示例演示了如何在Java多线程程序中使用synchronized修饰方法,保证线程安全。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程程序中synchronized修饰方法的使用实例 - Python技术站