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 阅读 11 次 更新于 2025-07-19 19:06:14 我来答关注问题0
  •  文暄生活科普 多线程同步的几种方式以及sychornized和lock的区别,lock的几个范围...

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

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

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

  • 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关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现...

  •  文暄生活科普 Thread的方法介绍sleep、join、yield、wait、notify等

    1. sleep方法(线程休眠,非锁操作)当一个线程使用Thread.sleep(0)时,它会暂时让出CPU,但不会释放同步锁。这种用法有助于缓解年轻代GC压力,如在快速循环中,通过让线程暂停,让GC有机会执行。2. yield方法(低优先级让步,非锁操作)尽管较少使用,yield让当前线程表示愿意暂时放弃CPU执行,但调度...

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

Java相关话题

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