多线程学习-synchronized 上

为什么会有多线程问题?

当多个线程对同一个资源(共享资源)进行更改操作时引起的数据问题

多线程问题解决?

在对共享资源操作的竞态代码块采用单线程模式访问

如何实现单线程模式反问竞态资源?

一般采用锁机制

什么是锁重入?

一个线程获取了该对象的锁以后,则也同时获取了该对象中其他竞态代码块的锁,直到该线程释放该对象,其他线程才可以访问该对象的竞态代码块 

以上几个问题是我个人简单理解 这次要说的是关于同步锁synchronized 的我的一些体会

synchroinzed Java关键字 隐式锁 当它修饰一个方法或者代码块时候,能够保证同一时刻最多只有一个线程执行该方法或者代码块

核心特点:锁的是对象  

demo1  验证synchroinzed的对竞态区的锁定

public class ThreadDemo {
    /**
     * 竞态方法 method1
     *
     * */
    public  synchronized void method1(){
        try{
            System.out.println(Thread.currentThread().getName());
            Thread.sleep(5000);
            System.out.println(Thread.currentThread().getName()+"  over");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 普通方法 method2
     *
     * */
    public   void method2(){
        System.out.println(Thread.currentThread().getName()+"  normal  method");
    }

    /**
     * 竞态方法 method3
     *
     * */
    public  synchronized void method3(){
        try{
            System.out.println(Thread.currentThread().getName());
            Thread.sleep(5000);
            System.out.println(Thread.currentThread().getName()+"  over");
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public static  void main(String[] args){
        final ThreadDemo threadDemo = new ThreadDemo();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                threadDemo.method1();
            }
        },"t1");
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                threadDemo.method2();
                threadDemo.method3();
            }
        },"t2");

        t1.start();
        t2.start();
    }
}

执行结果

t1
t2  normal  method
t1  over
t2
t2  over

可以看出t1,t2 两个线程对threadDemo对象同时进行了操作,虽然态t1获取了threadDemo的锁,但是不影响其他线程对非竞态方法的访问,却阻塞了其他线程对该对象的所有竞态资源的访问,直到自己执行完毕,释放锁。需要强调的一点是本例中是对threadDemo对象的加锁,作用范围只是该对象。不同对象的验证放在下篇




  









猜你喜欢

转载自blog.csdn.net/leeahuamsg/article/details/79455151