`
hotpro
  • 浏览: 21528 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

synchronized 关键字 老生常谈

阅读更多
  • synchronized这个关键字要修饰一段代码。
  • 一个线程(Thread)要运行一段代码,要获得的锁有两种 对象锁和类锁.
  •           对象锁:thread要获得某个具体的对象的的锁,才能运行这段代码.
              类锁:   thread要获得这个类的锁,才能运行这段代码.



下面就按这两种锁来分类

1. 对象锁
a. synchronized 修饰普通方法
   
synchronized void syncMethod() {}

b. synchronized 修饰代码块
    void method(Foo foo) {
        synchronized(foo) {
        }
    }

[注]
    synchronized void syncMethod() {}跟
    void method() {
        synchronized(this) {
        }
    }
    效果是一样的。

2. 类锁
c. synchronized 修饰static方法
  
synchronized void static syncStaticMethod() {}

d. synchronized 修饰代码块
   
class Foo {
        void method() {
            synchronized(Foo.class) {
            }
        }   
    }

[注]c和d的效果是一样的。

Tips:
      i. synchronized关键字放在void之前, public 之后

[补充1]
        看到synchronized修饰runnable 的run方法。

package com.test.testrun;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

class SyncRun implements Runnable {

    public void run() {
//        synchronized(this) {         //point 1
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
                Thread.yield();
            }
//        }
    }
    
}

public class TestRunMethod {

    public static void main(String[] args) {
        ExecutorService exec = Executors.newCachedThreadPool();
        SyncRun r = new SyncRun();
        for (int i = 0; i < 10; i++) {
//            exec.execute(new SyncRun());    //point 2
            new Thread(r).start();
        }
        
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {

            e.printStackTrace();
        }
        exec.shutdownNow();
    }
}


1. run方法里把synchronized注释掉,运行。
   结果很乱.
2. run方法把里用synchronized修饰,运行。
   结果很整齐.

point 2不知道有什么用!!!
分享到:
评论

相关推荐

    java的线程同步机制synchronized关键字的理解_.docx

    Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...

    java同步synchronized关键字用法示例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源时的同步机制。在Java中,当多个线程试图同时访问和修改同一块代码或数据时,可能会导致数据不一致的问题。为了解决这个问题,...

    java多线程中synchronized关键字的用法

    java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com

    深入理解Java中的synchronized关键字:同步机制与应用

    Java提供了多种机制来处理并发问题,其中synchronized关键字是最基本也是最常用的同步手段之一。本文将深入探讨synchronized关键字的工作原理、使用方式以及在实际编程中的应用。 synchronized关键字是Java中实现...

    实例解析Java中的synchronized关键字与线程平安问题_.docx

    Java 中的 synchronized 关键字与线程平安问题 在 Java 中,synchronized 关键字是一个非常重要的概念,它用于解决线程同步问题。但是,很多开发者对 synchronized 关键字的理解并不够深入,本文将通过实例解析 ...

    synchronized关键字的用法详解

    ### synchronized关键字的深入解析 #### 一、synchronized关键字的重要性 `synchronized`关键字在Java语言中扮演着极其重要的角色,它是实现线程安全的核心手段之一。通过`synchronized`关键字,开发人员可以在多...

    Java并发编程:Synchronized关键字深度解析

    本文深入探讨了Java中用于解决并发编程中线程安全问题的synchronized关键字。文章首先讨论了多线程编程中临界资源的概念,包括对象、变量、文件等,以及同步机制的必要性。重点解析了synchronized的工作原理,包括其...

    【Java并发编程】Synchronized关键字实现原理.doc

    Java 并发编程 Synchronized 关键字实现原理 Synchronized 关键字是 Java 并发编程中最基本的同步机制,它可以保证线程安全,包括原子性、可见性和有序性。Synchronized 关键字可以修饰方法或代码块,使得在同一...

    Java 多线程与并发(4-26)-关键字- synchronized详解.pdf

    "Java 多线程与并发(4-26)-关键字- synchronized详解" Java 多线程与并发中的 synchronized 关键字是实现同步块的互斥访问和线程的阻塞及唤醒等工作的重要工具。下面将对 synchronized 关键字进行详细分析。 ...

    java基本教程之synchronized关键字java多

    一、synchronized关键字的作用与原理 `synchronized`关键字主要有两个作用:同步方法和同步块。它通过锁机制来实现线程同步,防止多个线程同时执行同一段代码,可能导致的数据不一致问题。 1. 同步方法:当在方法...

    Synchronized关键字的用法

    ### Synchronized关键字在Java中的应用 #### 概述 `synchronized`是Java语言中的一个关键字,主要用于实现线程同步,防止多个线程同时访问共享资源而导致的数据不一致问题。通过`synchronized`关键字,开发者可以...

    Lock接口与synchronized关键字

    ### Lock接口与synchronized关键字详解 #### 一、概述 在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。它们虽然都用于控制多线程对共享资源的访问,但在使用方式、功能特性及灵活性方面...

    synchronized关键字的实质及用法

    《深入理解Java中的synchronized关键字》 在Java编程语言中,`synchronized`关键字是用于实现线程同步的重要工具,它的本质在于确保多线程环境下的数据一致性与安全性。通过`synchronized`,我们可以控制对共享资源...

    java实现单例模式-懒汉模式(线程安全,使用synchronized关键字)

    线程安全,使用synchronized关键字

    5-4JVM内置锁synchronized关键字详解.mp4

    5-4JVM内置锁synchronized关键字详解.mp4

    深入理解java中的synchronized关键字

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,它的主要目的是确保在多线程环境中,对共享资源的访问能够保持数据的一致性和完整性。本文将深入探讨`synchronized`的两种主要用法:synchronized方法和...

    Java中的同步机制:深入理解synchronized关键字

    synchronized关键字是Java中实现线程同步的基本工具,它通过锁定对象的monitor来控制对共享资源的并发访问。理解synchronized的工作原理和使用方式对于编写线程安全的Java程序至关重要。然而,由于其局限性,开发者...

    Java并发-Synchronized关键字.docx

    本文将探讨Synchronized关键字在解决并发控制中的作用及其使用方式。 首先,让我们回顾一下问题的背景:在给出的示例代码中,创建了10个线程,每个线程都对共享变量`count`进行10000000次的累加操作。理论上,最终...

    java里面synchronized用法.doc

    Java 中的 synchronized 关键字是用于解决多线程并发问题的重要工具之一。它可以被用于方法、代码块和变量上,以实现对共享资源的互斥访问控制。本文将对 Java 中的 synchronized 用法进行详细的解释和分析。 一、...

Global site tag (gtag.js) - Google Analytics