Android-Java-synchronized同步锁机制&利与弊

synchronized同步锁机制

定义锁??的方式一:

package android.java.thread09;

public class Test implements Runnable {

    @Override
    public void run() {

        /**
         * 定义一个锁??,这个锁是Jav内部要去判断用的,属于隐士的 看不到的
         * Java内部的实现属于 ??锁机制
         */
        Object lock = new Object();

        synchronized (lock) {
            /**
             * 多线程操作共享数据
             * 重复执行引发的问题
             * ...........
             */
        }

    }
}

定义锁??的方式二:

package android.java.thread09;

public class Test2 implements Runnable {

    @Override
    public void run() {

        /** Test2.class 认为是一个锁??,这个锁是Jav内部要去判断用的,属于隐士的 看不到的
         *  Java内部的实现属于 ??锁机制
         */
        synchronized (Test2.class) {
            /**
             * 多线程操作共享数据
             * 重复执行引发的问题
             * ...........
             */
        }

    }
}

定义锁??的方式 ......    还有很多方式


举例:高铁上的厕所:

1.厕所门显示无人,高铁上有五个人,这五个人谁先进去(代表谁被CPU执行了)

     synchronized (厕所门显示无人 ??) {
            // 上厕所任务
            ........
        }

2.厕所门显示有人,高铁上有五个人,进去了一个人,进去的这个人一旦进去就会把门??上,其他四个人在门外等着,进不去

     synchronized (厕所门显示有人 ??) {
            // 上厕所任务
            ........
        }

3.进去的哪个人,上完厕所了,锁就打开了,厕所门上显示无人,  其他四个人谁先进去(主要看CPU执行权在哪个线程上执行)

     synchronized (厕所门显示无人 ??) {
            // 上厕所任务
            ........
        }
        上完厕所了,锁就打开??,厕所门上显示无人


synchronized同步代码块利与弊

1.好处是:synchronized同步代码,解决安全问题。

2.坏处是:每次都需要判断synchronized(的??是否 锁住),有点耗性能;

总结:1.完全问题解决,   2.有点耗性能,  当然选择1.完全问题解决

原文地址:https://www.cnblogs.com/android-deli/p/10228298.html

时间: 2024-10-17 08:34:52

Android-Java-synchronized同步锁机制&利与弊的相关文章

JAVA synchronized关键字锁机制(中)

synchronized 锁机制简单的用法,高效的执行效率使成为解决线程安全的首选. 下面总结其特性以及使用技巧,加深对其理解. 特性: 1. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.       2. 当一个线程同时访问object的一个synchronized(this)同步代码块时,其它线程仍然可以访问非修饰的方法或代码块.       3. 当多个线程同时访问object的synchronized(this)同步代码

java多线程(二)——锁机制synchronized(同步方法)

synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块.然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块. ——以上来源百度百科 一.方法内的变量为线程安全 “非线程安全”的问题

深入浅出Java并发包—锁机制(一)

前面我们看到了Lock和synchronized都能正常的保证数据的一致性(上文例子中执行的结果都是20000000),也看到了Lock的优势,那究竟他们是什么原理来保障的呢?今天我们就来探讨下Java中的锁机制! Synchronized是基于JVM来保证数据同步的,而Lock则是在硬件层面,依赖特殊的CPU指令实现数据同步的,那究竟是如何来实现的呢?我们一一看来! 一.synchronized的实现方案 synchronized比较简单,语义也比较明确,尽管Lock推出后性能有较大提升,但是

JAVA中关于锁机制

本文转自 http://blog.csdn.net/yangzhijun_cau/article/details/6432216 一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中). 取到锁后,他就开始执行同步代码(被synchronized修饰的代码):线程执行完同步代码后马上就把锁还给同步对象,其他在锁

深入浅出Java并发包—锁机制(三)

接上文<深入浅出Java并发包—锁机制(二)>  由锁衍生的下一个对象是条件变量,这个对象的存在很大程度上是为了解决Object.wait/notify/notifyAll难以使用的问题. 条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”).因为访问此共享状态信息发生在不同的线程中,所以它必须受保护,因此要将某种形式的锁与该条件相关联.等待提供一个条件的主要属性是:以原子方式 释放相关的锁,并

深入浅出Java并发包—锁机制(二)

接上文<深入浅出Java并发包—锁机制(一)  >  2.Sync.FairSync.TryAcquire(公平锁) 我们直接来看代码 protected final boolean tryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (isFirst(current) && compareAndSetStat

java多线程(三)——锁机制synchronized(同步语句块)

用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法之行一个长时间的任务,那么B线程必须等待比较长的时间,在这样的情况下可以使用synchronized同步语句快来解决. 一.用同步代码块解决同步方法的弊端 Task类 1 package com.weishiyao.learn.day4.testSynchorized.ep2; 2 3 public class Task { 4 5 private String getData1; 6 private Stri

【转载】Java中的锁机制 synchronized &amp; Lock

参考文章: http://blog.csdn.net/chen77716/article/details/6618779 目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理. 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的

深入浅出 Java Concurrency (15): 锁机制 part 10 锁的一些其它问题[转]

主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是<Java Concurrency in Practice>,结合自己的理解和实际应用对锁机制进行一个小小的总结. 首先需要强调的一点是:所有锁(包括内置锁和高级锁)都是有性能消耗的,也就是说在高并发的情况下,由于锁机制带来的上下文切换.资源同步等消耗是非常可观的.在某些极端情况下,线程在锁上的消耗可能比线程本身的消耗还要多.所以如果可能的话,在任何情况下都尽量少用锁,如果不可避免那么采用非阻塞算法是一个不错的解决方案,但是却也不是绝对的.