码迷,mamicode.com
首页 > 其他好文 > 详细

hadoop07---synchronized,lock

时间:2018-05-08 11:14:58      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:oid   end   cas   tst   static   string   AC   get   pac   

synchronized
锁是jvm控制的,控制锁住的代码块只能有一个线程进入。线程执行完了锁自动释放,抛出异常jvm会释放锁。

?synchronized的缺陷
1.如果一个线程被阻塞了,其余的线程就要一直等下去,Lock可以在线程阻塞的时候其他线程不用一直等下去。
2.同时读文件时候,其他线程也要等待,lock可以做到读的时候不加锁,写的时候枷锁。
3.synchronized不知道线程有没有成功获取到锁。Lock可以知道线程有没有成功获取到锁。

 

package cn.itcast_01_mythread.thread.testThread;

public class MySynchronized {
    
    //    synchronized也可以放在方法上面
    public static void main(String[] args) {
        final MySynchronized mySynchronized = new MySynchronized();
        final MySynchronized mySynchronized2 = new MySynchronized();
        new Thread("thread1") {
            public void run() {
                synchronized (mySynchronized) {
                    try {
                        System.out.println(this.getName()+" start");
                        int i =1/0;   //如果发生异常,jvm会将锁释放
                        Thread.sleep(5000);
                        System.out.println(this.getName()+"醒了");
                        System.out.println(this.getName()+" end");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
        new Thread("thread2") {
            public void run() {
                synchronized (mySynchronized) {         //争抢同一把锁时,线程1没释放之前,线程2只能等待
//                    synchronized (mySynchronized2) {    //如果不是一把锁,可以看到两句话同时打印
                    System.out.println(this.getName()+" start");
                    System.out.println(this.getName()+" end");
                    
                }
            }
        }.start();
    }
}

 

hadoop07---synchronized,lock

标签:oid   end   cas   tst   static   string   AC   get   pac   

原文地址:https://www.cnblogs.com/yaowen/p/9006846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!