java 线程同步的几种方式
import java.util.concurrent.locks.lock;
import java.util.concurrent.locks.reentrantlock;
public class syntest {
public static void main(string[] args) throws exception{
//1.两个线程共享变量,变量值不确定
//nonsyn();
//2.使用线程同步方法:synchronized save1
//syn();
//3.使用volatile 线程同步: volatile int account
//vola();
//4.使用重入锁reentrantlock: save2() , new lock
//lock();
//5.使用局部变量threadlocal线程同步: threadlocal
bank2 b=new bank2();
newthread2 t=new newthread2(b);
thread t1=new thread(t,"t1");
t1.start();
thread t2=new thread(t,"t2");
t2.start();
t1.join();
t2.join();
system.out.println("非同步 account=" b.get());
}
static void nonsyn()throws exception{
bank b=new bank();
newthread t=new newthread(b);
thread t1=new thread(t,"t1");
t1.start();
thread t2=new thread(t,"t2");
t2.start();
t1.join();
t2.join();
system.out.println("非同步 account=" b.get());
}
static void syn()throws exception{
bank b=new bank();
newthread t=new newthread(b);
thread t1=new thread(t,"t1");
t1.start();
thread t2=new thread(t,"t2");
t2.start();
t1.join();
t2.join();
system.out.println("非同步 account=" b.get());
}
static void vola()throws exception{
bank b=new bank();
newthread t=new newthread(b);
thread t1=new thread(t,"t1");
t1.start();
thread t2=new thread(t,"t2");
t2.start();
t1.join();
t2.join();
system.out.println("非同步 account=" b.get());
}
static void lock()throws exception{
bank b=new bank();
newthread t=new newthread(b);
thread t1=new thread(t,"t1");
t1.start();
thread t2=new thread(t,"t2");
t2.start();
t1.join();
t2.join();
system.out.println("非同步 account=" b.get());
}
}
class bank{
private int account;
//private volatile int account;
private lock lock=new reentrantlock();
public void save(int money){
this.account =money;
}
// public synchronized void save1(int money){
// this.account =money;
// }
public void save2(int money){
lock.lock();
this.account =money;
lock.unlock();
}
public int get(){
return this.account;
}
}
class newthread implements runnable{
private bank bank;
public newthread(bank bank){
this.bank=bank;
}
public void run() {
for(int i=0;i<30000;i ){
//bank.save(10); //使用volatile 同步
//bank.save1(10); //使用synchronized 同步
bank.save2(10);//使用lock同步
system.out.println("非同步 account=" bank.get());
}
//system.out.println( " account=" bank.get());//结果不确定20000
}
}
class bank2{
private threadlocal
protected integer initialvalue(){
return 0;
}
};
public void save(int money){
account.set(account.get() money);
}
public int get(){
return this.account.get();
}
}
class newthread2 implements runnable{
private bank2 bank;
public newthread2(bank2 bank){
this.bank=bank;
}
public void run() {
for(int i=0;i<30000;i ){
bank.save(10);
//system.out.println(thread.currentthread().getname() "同步 account=" bank.get());
}
system.out.println(thread.currentthread().getname() "同步 account=" bank.get());
}
}
threadlocal 线程局部变量如何线程通信呢?
相关推荐
java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例
java线程:线程的同步与锁 java线程:线程的交互 java线程:线程的调度-休眠 java线程:线程的调度-优先级 java线程:线程的调度-让步 java线程:线程的调度-合并 java线程:线程的调度-守护线程 java线程:...
java多线程同步论文.doc
java线程:线程的同步与锁 java线程:线程的交互 java线程:线程的调度-休眠 java线程:线程的调度-优先级 java线程:线程的调度-让步 java线程:线程的调度-合并 java线程:线程的调度-守护线程 java线程:线程的...
多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!
java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料
java多线程机制 9.1 java中的线程 9.2 thread的子类创建线程 9.3 使用runable接口 9.4 线程的常用方法 9.5 gui线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyall()方法 9.8 挂起、恢复和终止线程 ...
java多线程同步分析java多线程同步分java多线程同步分析析java多线程同步分析java多线程同步分析
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例a线程修改了主内存(main方法的线程)变量,需要把a线程修改的结果同步到主线程中,这时b线程再从主线程获取该变量的值,这样就实现了...
java 多线程同步方法的实例 java 多线程同步方法的实例 java 多线程同步方法的实例
java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、java中的线程 3 三、java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 java线程:创建与启动 7 java线程:线程名称的设定及获取 10 java...
java多线程同步.pdf
java多线程同步具体实例讲解 .doc
java线程(二):线程同步synchronized和volatile 详细讲解java 同步的原理技术资料
java多线程同步具体实例.doc
本代码是用java实现的生产者与消费者的问题,线程间的同步与互斥功能
java多线程知识点,源代码案例,代码案例中包括如何创建线程,主线程,线程优先级,线程组,线程同步,死锁,线程间的通信知识点
资源名称:java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...
java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发...