zoukankan      html  css  js  c++  java
  • (37)synchronized同步代码块

    synchronized关键字:线程之间的锁,解决线程之间的共享数据冲突。

    synchronized关键字的使用:

    synchronized( 一个任意的对象(锁) ){

      代码块中放操作共享数据的代码。

    }

    多段被synchronized修饰的代码,若持有相同的锁,则这几段代码不能够同时运行。

    代码实例:

    public class MySynchronized {
           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();
          }
    }

    synchronized的缺陷:会降低系统的效率

    如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况:

    1)获取锁的线程执行完了该代码块,然后线程释放对锁的占有;

    2线程执行发生异常,此时JVM会让线程自动释放锁。

  • 相关阅读:
    CF850A Five Dimensional Points 题解
    AT3963 [AGC024F] Simple Subsequence Problem 题解
    jquery事件绑定机制
    前端初级词汇
    一个checkbox细节处理方式(checkbox与后面的文字对其)
    转 CSS hack:针对IE6,IE7,firefox显示不同效果
    想到的几点页面规范
    jQuery UI Dialog:Demo2:实用技巧
    zindex
    递归示例
  • 原文地址:https://www.cnblogs.com/paradis/p/11429976.html
Copyright © 2011-2022 走看看