线程同步

1.线程同步(互斥-独占)
   a.为什么? 
     目的:为了解决数据的并发异常。
      多个线程  操作同一个资源的时候,可能会引发数据不一致。 
      资源叫做  临界资源。
      现象叫做  并发。
   b.同步本质
      每一个对象,有且只有一个对象(锁)监视器(同步锁)。
      并且,对象监视器 只能被一个线程持有。
 
     synchronized  研究的是 线程 与  对象监视器
     之间的关系。
 
 
   c.应用
     打电话
 
     单例
       I.不允许外部 new 该对象
           构造器 private
       II.势必类 内部  提供一个方法  为
       外部 得到 该 类的 实例   只能静态方法
       III.确保  单例
    懒:static 静态方法
    饿:synchronized  块  代码 执行 性能很差
        private static  A a = new A();
 
 
2.同步 协助
 
   生产者消费案例
 
 
 
public class Tel{
     public String name;
     public void call(){
          for(int i=1;i<10;i++){
               System.out.println(Thread.currentTread().getName()+"用电话"+name+"拨号"+i+"--");
              try{
                    Thread.sleep(100);
               }catch(InterruptedException e){
                    e.printStackTrace();
               }
             
          }
     }
}
 
 
public class Persnon extends Thread{
 
     public Person(String name){
          super(name);
     }
 
     public Tel tel;
 
     public Tel getTel(){
          return tel;
     }     
 
     public void setTel(Tel tel){
          this.tel=tel;
     }
 
     public void run(){
          Synchronized(tel){    //同步块(同步锁)(项目中,同步锁的效率极低)
          tel.call();
          }
     }
}
 
 
 
public class Test{
     public static void main(String[])args{
          Tel t1 = new Tel();
          t1.name = "摩托罗拉";
          Tel t2 = new Tel();
          t2.name = "诺基亚";
          
     
          Person p1 = new Person("张三线程");
          p1.setTel(t1);
          Person p2 = new Person("李四线程");
          p2.setTel(t2);
         
          p1.start();
          p1.start();
     }
}
 
 
 
 
/**
*单例
*/
public class A{
     private static A a;
     private A(){
         System.ou.println("-----"); 
     }
     public static A getInstance(){
         if(a==null){
               a=new A();
          } 
          return a;
     } 
}
 
/**
*测试
*/
public class Test(){
     new Tread(){
          public void run(){
               A.getInstance();
          }
     }.start();     //匿名内部类
 
     A.getInstance();
     A.getInstance();
     A.getInstance();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/nin-w/p/5907473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值