hadoop07---synchronized,lock
Posted 672530440
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop07---synchronized,lock相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
重启集群造成块丢失问题org.apache.hadoop.hdfs.CannotObtainBlockLengthException: Cannot obtain block length for L
错误:线程“主”java.lang.UnsatisfiedLinkError 中的异常:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(L