java中线程同步的几种方法

1、同步方法,即使用synchronized关键字修饰方法,例如:public synchronized void add(int c){...}2、同步代码块,即有synchronized关键字修饰的语句块,例如:public void addAndGet(int c){ synchronized(this){ count += c; }}3、使用特殊域变量(volatile)实现线程同步,该方法不能保证...
java中线程同步的几种方法
线程同步主要有以下种方法(示例中是实现计数的功能):
1、同步方法,即使用synchronized关键字修饰方法,例如:
public synchronized void add(int c){...}2、同步代码块,即有synchronized关键字修饰的语句块,例如:
public void addAndGet(int c){ synchronized(this){ count += c; }}3、使用特殊域变量(volatile)实现线程同步,该方法不能保证绝对的同步。
例如:private volatile int count = 0;
4、使用锁实现线程同步,例如:
private Lock lock = new ReentrantLock(); public void add(int c) { lock.lock();//上锁 try{ count += c; }finally{ lock.unlock();//解锁 } }5、使用原子变量实现线程同步,在java的util.concurrent.atomic包中提供了创建了原子类型变量的工具类,例如:
private AtomicInteger count= new AtomicInteger(1);public void add(int c) { count.addAndGet(c);}6、使用局部变量实现线程同步,如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本, 副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。
ThreadLocal 类的常用方法
new ThreadLocal<T>() : 创建一个线程本地变量
get() : 返回此线程局部变量的当前线程副本中的值
initialValue() : 返回此线程局部变量的当前线程的"初始值"
set(T value) : 将此线程局部变量的当前线程副本中的值设置为value
示例代码:
private static ThreadLocal<Integer> count= new ThreadLocal<Integer>(){ @Override protected Integer initialValue(){ return 1; } }; public void add(int c){ count.set(count.get() + c); }7、使用阻塞队列实现,例如LinkedBlockingQueue,具体使用可百度LinkedBlockingQueue的用法或查看java文档。
2018-05-28
java中多线程的实现方法有两种:1.直接继承thread类;2.实现runnable接口;同步的实现方法有五种:1.同步方法;2.同步代码块;3.使用特殊域变量(volatile)实现线程同步;4.使用重入锁实现线程同步;5.使用局部变量实现线程同步 。
其中多线程实现过程中需注意重写或者覆盖run()方法,而对于同步的实现方法中使用较常使用的是利用synchronized编写同步方法和代码块。2018-05-28
mengvlog 阅读 198 次 更新于 2025-10-29 23:31:44 我来答关注问题0
  •  文暄生活科普 多线程同步的几种方式以及sychornized和lock的区别,lock的几个范围...

    多线程同步的几种方式:原子操作:确保在多线程环境下某个操作的原子性,常见的原子操作包括原子变量、原子引用等。信号量:一个计数器,用于控制访问某个共享资源的线程数量,当线程数达到上限时,其他线程必须等待。此外还包括互斥锁、条件变量等同步机制。Synchronized与Lock的区别:内置与接口:Synchronized...

  • 1、同步方法,即使用synchronized关键字修饰方法,例如:public synchronized void add(int c){...}2、同步代码块,即有synchronized关键字修饰的语句块,例如:public void addAndGet(int c){ synchronized(this){ count += c; }}3、使用特殊域变量(volatile)实现线程同步,该方法不能保证...

  • (1)同步方法:即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。(2)同步代码块 即有synchronized关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现...

  •  宸辰游艺策划 ava中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

    在Java编程中,有两类实现线程的方法:一种是直接继承Thread类,另一种是实现Runnable接口。选择哪一种取决于具体需求。使用Thread子类通常更简洁,但可能不如实现Runnable接口灵活。同步方法的实现通常使用synchronized关键字。它能确保在同一时间只有一个线程能够执行同步代码块或方法。虽然stop()和suspend()...

  • 山东中公优就业 多线程同步有几种实现方法

    4、使用重入锁实现线程同步 在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。ReentrantLock类是可重入、互斥、实现了Lock接口的锁,它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力 5、使用局部变量实现线程同步 如果使用ThreadLocal管理变量,则每一个使用该变量的线程都...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部