导航:首页 > 编程知识 > pc编程中线程同步的方式有哪些

pc编程中线程同步的方式有哪些

发布时间:2024-07-12 20:25:49

java中线程同步的几种方法

线程同步主要有以下种方法(示例中是实现计数的功能):

1、同步方法,即使用synchronized关键字修饰方法,例如:

publicsynchronizedvoidadd(intc){...}

2、同步代码块,即有synchronized关键字修饰的语句块,例如:

publicvoidaddAndGet(intc){
synchronized(this){
count+=c;
}
}

3、使用特殊域变量(volatile)实现线程同步,该方法不能保证绝对的同步。

例如:privatevolatileintcount=0;

4、使用锁实现线程同步,例如:

privateLocklock=newReentrantLock();
publicvoidadd(intc){
lock.lock();//上锁
try{
count+=c;
}finally{
lock.unlock();//解锁
}
}

5、使用原子变量实现线程同步,在java的util.concurrent.atomic包中提供了创建了原子类型变量的工具类,例如:

privateAtomicIntegercount=newAtomicInteger(1);
publicvoidadd(intc){
count.addAndGet(c);
}

6、使用局部变量实现线程同步,如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本, 副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

ThreadLocal 类的常用方法

new ThreadLocal<T>() : 创建一个线程本地变量

get() : 返回此线程局部变量的当前线程副本中的值

initialValue() : 返回此线程局部变量的当前线程的"初始值"

set(T value) : 将此线程局部变量的当前线程副本中的值设置为value

示例代码:

privatestaticThreadLocal<Integer>count=newThreadLocal<Integer>(){
@Override
protectedIntegerinitialValue(){
return1;
}
};

publicvoidadd(intc){
count.set(count.get()+c);
}

7、使用阻塞队列实现,例如LinkedBlockingQueue,具体使用可网络LinkedBlockingQueue的用法或查看java文档。

② Java 线程同步几种方式

(1)同步来方法:
即有synchronized关键字修饰的自方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
(2)同步代码块
即有synchronized关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
(3)使用特殊域变量(Volatile)实现线程同步
a.volatile关键字为域变量的访问提供了一种免锁机制
b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
c.因此每次使用该域就要重新计算,而不是使用寄存器中的值
d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
(4)使用重入锁实现线程同步
在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。ReentrantLock类是可重入、互斥、实现了Lock接口的锁, 它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力。
(5)使用局部变量实现线程同步

③ JAVA中线程同步方法有哪些

JAVA中线程同步的概念在同一个线程运行 前面的运行完在运行后面的 有先后顺序 ,简单的讲就是版像排队一样有权先后顺序。
同步的方法有下面3种;
1,wait方法:
该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。
2 notify方法和notifyAll方法:
notify方法通知调用了wait方法,但是尚未激活的一个线程进入线程调度队列(即进入锁竞争),注意不是立即执行。并且具体是哪一个线程不能保证。另外一点就是被唤醒的这个线程一定是在等待wait所释放的锁。
notifyAll方法则唤醒所有调用了wait方法,尚未激活的进程进入竞争队列。
3。 synchronized关键字:

synchronized用来标识一个普通方法时,表示一个线程要执行该方法,必须取得该方法所在的对象的锁。
根据项目的需求,选择有哪一种方法好一些。

阅读全文

与pc编程中线程同步的方式有哪些相关的资料

热点内容
dat文件转换avi 浏览:173
安卓编程里上下边距怎么写 浏览:427
云班课文件在哪个文件夹 浏览:298
健康码用到了哪些方面的大数据 浏览:379
苹果手机拆装教程 浏览:244
excel抓取文件链接 浏览:510
魔灵召唤主角升级 浏览:746
linux文件系统实验 浏览:897
怎么读取电脑数据库中的数据 浏览:443
苹果7怎么开启锁屏密码 浏览:98
怎么找到图片上的文件 浏览:644
qq接收文件转移 浏览:323
双色球哪些数据最重要 浏览:133
从pc上传文件找不到路径 浏览:484
电脑文件传微信朋友圈 浏览:9
丰都学校网站制作多少钱 浏览:183
linux分片视频 浏览:805
颁发文件怎么说 浏览:716
直播用什么数据线连接摄像机 浏览:58
请问该如何将app隐藏 浏览:870

友情链接