Java线程同步是Java多线程编程中非常重要的一部分,可以保证线程安全,避免出现数据竞争等问题。本文将介绍Java中线程同步的两种常用方法:synchronized关键字和volatile关键字。
synchronized关键字用于实现Java中的线程同步,可以保证同一时刻只有一个线程访问共享资源。synchronized关键字可以用在方法上或代码块上。
在Java中,可以使用synchronized关键字修饰方法来实现方法同步。方法同步可以保证同一时刻只有一个线程执行这个方法,其他线程需要等待。
public synchronized void method() { // 方法体 }
上述代码中,使用synchronized关键字修饰了method()方法,这样就可以保证同一时刻只有一个线程执行这个方法。
在Java中,也可以使用synchronized关键字修饰代码块来实现代码块同步。代码块同步可以保证同一时刻只有一个线程访问代码块中的代码。
public void method() { // 代码块 synchronized (this) { // 代码块中的代码 } }
上述代码中,使用synchronized关键字修饰了代码块,这样就可以保证同一时刻只有一个线程访问代码块中的代码。
volatile关键字用于保证线程之间的可见性,即一个线程修改了共享变量的值,其他线程可以立即看到这个修改。
public class VolatileDemo { private volatile int count = 0; public void increase() { count++; } }
上述代码中,使用volatile关键字修饰了count变量,这样就可以保证线程之间的可见性。
下面是一个使用synchronized关键字实现方法同步的代码案例:
public class SynchronizedDemo { private int count = 0; public synchronized void increase() { count++; } public static void main(String[] args) { SynchronizedDemo demo = new SynchronizedDemo(); for (int i = 0; i < 10; i++) { new Thread(() -> { for (int j = 0; j < 1000; j++) { demo.increase(); } }).start(); } System.out.println(demo.count); } }
上述代码中,使用synchronized关键字修饰了increase()方法,这样就可以保证同一时刻只有一个线程执行这个方法。在main()方法中,创建了10个线程,每个线程执行1000次increase()方法,最终输出count的值。
下面是一个使用volatile关键字保证线程可见性的代码案例:
public class VolatileDemo { private volatile int count = 0; public void increase() { count++; } public static void main(String[] args) { VolatileDemo demo = new VolatileDemo(); for (int i = 0; i < 10; i++) { new Thread(() -> { for (int j = 0; j < 1000; j++) { demo.increase(); } }).start(); } while (Thread.activeCount() > 1) { Thread.yield(); } System.out.println(demo.count); } }
上述代码中,使用volatile关键字修饰了count变量,这样就可以保证线程之间的可见性。在main()方法中,创建了10个线程,每个线程执行1000次increase()方法,最终输出count的值。
通过本文的教学,相信大家已经掌握了Java中的线程同步,包括synchronized关键字和volatile关键字的使用方法和细节,以及对应的代码案例。希望本文能够帮助到编程小白更好地理解和掌握Java多线程编程中的线程同步。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com