• 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对象,静态和非静态方法的锁互不干涉,

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

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

        

  • 相关阅读:
    sql语句最后一行显示统计。
    Win10访问不到XP共享的解决:
    git-github-TortoiseGit综合使用教程(二)快速入门
    git-github-TortoiseGit综合使用教程(一)简介
    RHEL7 -- 修改主机名
    安装完 MySQL 后必须调整的 10 项配置(转)
    my.cnf
    mysql查看系统参数
    MySQL性能的五大配置参数(内存参数)
    (转)Linux用户登录记录日志和相关查看命令汇总
  • 原文地址:https://www.cnblogs.com/2nao/p/6493261.html
Copyright © 2020-2023  润新知