java多线程与线程同步 -凯发k8国际

`
zw7534313
  • 浏览: 1231629 次
  • 性别:
  • 来自: 北京
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 21)
    • ( 1)
    存档分类
    最新评论

    java多线程与线程同步

      博客分类:
    • java

     

                 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 account=new 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 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发...

    global site tag (gtag.js) - google analytics
    网站地图