zoukankan      html  css  js  c++  java
  • Java线程:线程的同步与锁

    1.同步和锁

        java中每个对象都有一个内置锁,程序执行非静态的synchronized同步方法时,自动获得执行该方法的对象有关的锁.

        一个对象只有一个锁,当一个线程获得锁,其他线程不能进入该对象上的synchronized方法或代码块.直到锁被释放.

        线程可以有多个锁,例如,一个对象的同步方法中调用另一个对象的同步方法

    2.静态方法的同步

        同步静态方法,用的是类对象的锁,即xx.class.

    3.线程安全类

        对类中的方法进行了同步,但操作这个类时仍然不一定安全.

        例如:

          public  class NameList{

            private List nameList=Collections.synchonizedList(new LinkedList());

             public void add(String name){

              nameList.add(name);

            }

            public Stirng removeFirst(){
             if(nameList.size()>0){
              return (String)nameList.remove(0);

              }else{
                return null;

                }

              }

            }

            public classTest{

              public static void main(String[] args){

              final NameList list=new NameList(); 

                nl.add("aaa");
                class NameDropper extends Thread{
                        public void run(){
                          String name = nl.removeFirst();
                          System.out.println(name);
                      }
                  }

                    Thread t1 = new NameDropper();
                    Thread t2 = new NameDropper();
                    t1.start();
                    t2.start();
                  }
            } 

          虽然集合对象时安全的,但程序还是有问题的,解决办法  ,在两个方法上进行同步synchronized

    4.java中实现线程同步:

            a.将需要同步访问的资源定义为private

            b.哪里修改此资源,使用synchronized关键字同步操作的方法或者代码块

    5.总结:

        线程的同步是为了保护多线程访问同一个资源时,对资源的破坏

        线程同步方法时通过锁来实现的,每个对象仅仅有一个锁,一个线程获得了对象锁,其他线程就无法访问该对象的同步方法

        对于静态同步方法,锁是针对这个类的,锁对象时这个类的Class对象,静态和非静态方法的锁互不干涉,

        当多个线程等待一个对象锁时,没有获得锁的线程将发生阻塞

        死锁是线程间相互等待对方的锁造成的,死锁发生,程序死掉

        

  • 相关阅读:
    yum仓库客户端搭建和NTP时间同步客户端配置
    linux中删除文件内空白行的几种方法。
    ubuntu下安装memcached和PHP的memcache扩展
    Java JXL 实现Excel文件读写操作
    Spring事务管理
    代理模式
    Java POI 实现Excel文件读写操作
    iOS 查找文件、遍历文件系统
    iOS NSDate获取当前时间并格式化
    iOS 为类添加Xib里面配置的view
  • 原文地址:https://www.cnblogs.com/2nao/p/6493261.html
Copyright © 2011-2022 走看看