- 浏览: 2663453 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
synchronized(this) {
}
---------------------------------------------
Object lock = new Object();
synchronized(lock ) {
}
---------------------------------------------
synchronized(XXX.class ) {
}
之前对三种写同步有什么区别一直不是很理解,今天想了一下
其实也很好理解,每种同步都需要一种锁来实现同步机制。第一种和在成员方法前面加
synchronized 是一致的,本意是在this对象上面加锁,这样的效果就是如果有多个synchronized 方法的话,只能响应其中一个synchronized 方法。
out:
test1 sleep...........
exit test1()
test2()
当我们有一个Thread访问Boo .test1()的时候进入同步状态,其他所有的synchronized this对象级别的方法都会进入阻塞状态,其他线程不但不能访问test1(),test2()也不能访问。
所以要谨慎使用synchronized this,其中就出现了一个故障:blog服务器不定时的报警。
原因:文章的cache dao的多个方法都采用了syncronized(this)块同步,而cache dao是singleton,这样锁就是唯一的锁,当一个线程访问cache dao的一个synchronized(this)同步代码块时,其他线程对该对象中所有其它synchronized(this)同步代码块的访问将被阻塞。
类似于this锁,synchronized(XXX.class ) 会在类上面加锁,这样会导致所有的static synchronized会被阻塞。
而Object lock = new Object();会在lock 上面加锁,这样导致所有访问这个lock 锁的synchronized块被阻塞。
一言以蔽之,同步分三个级别,类级别,对象级别,局部变量级别。类级别的同步阻塞所有的static方法,对象级别的同步阻塞所有实例方法,局部变量级别的同步阻塞当前线程访问的方法。
}
---------------------------------------------
Object lock = new Object();
synchronized(lock ) {
}
---------------------------------------------
synchronized(XXX.class ) {
}
之前对三种写同步有什么区别一直不是很理解,今天想了一下
其实也很好理解,每种同步都需要一种锁来实现同步机制。第一种和在成员方法前面加
synchronized 是一致的,本意是在this对象上面加锁,这样的效果就是如果有多个synchronized 方法的话,只能响应其中一个synchronized 方法。
class Boo { public void test1() { synchronized(this){ try { System.out.println("test1 sleep..........."); Thread.sleep(5000); } catch (InterruptedException e) { } finally { System.out.println("exit test1()"); } } } public synchronized void test2() { System.out.println("test2()"); } }
out:
test1 sleep...........
exit test1()
test2()
当我们有一个Thread访问Boo .test1()的时候进入同步状态,其他所有的synchronized this对象级别的方法都会进入阻塞状态,其他线程不但不能访问test1(),test2()也不能访问。
所以要谨慎使用synchronized this,其中就出现了一个故障:blog服务器不定时的报警。
原因:文章的cache dao的多个方法都采用了syncronized(this)块同步,而cache dao是singleton,这样锁就是唯一的锁,当一个线程访问cache dao的一个synchronized(this)同步代码块时,其他线程对该对象中所有其它synchronized(this)同步代码块的访问将被阻塞。
类似于this锁,synchronized(XXX.class ) 会在类上面加锁,这样会导致所有的static synchronized会被阻塞。
而Object lock = new Object();会在lock 上面加锁,这样导致所有访问这个lock 锁的synchronized块被阻塞。
一言以蔽之,同步分三个级别,类级别,对象级别,局部变量级别。类级别的同步阻塞所有的static方法,对象级别的同步阻塞所有实例方法,局部变量级别的同步阻塞当前线程访问的方法。
发表评论
-
Raft
2018-07-12 14:20 762前言 上篇文章说解决问题要分而治之,先把分片的问题解决了再 ... -
java uuid
2017-09-14 18:18 560在java中产生uuid的方式是使用java.util.UU ... -
JAVA 编码规范
2017-09-06 11:34 418https://google.github.io/style ... -
mac 入门
2015-12-01 16:28 626http://foocoder.com/blog/wo-zai ... -
java 反编译工具gad
2014-05-09 12:04 977java 反编译工具gad,备个份。 -
java 代码大全(code book)
2014-04-29 10:59 1083参考这里: http://www.java2s.com/C ... -
SQL语法解析器JSQLParser
2014-02-09 19:53 2150SQL 语法解释器jsqlparser 是用java ... -
BufferedInputStream 深入研究。
2013-11-19 13:26 14271. BufferedInputStream的基本原理 ... -
java 启动脚本
2013-08-22 19:08 982java 启动脚本 #!/bin/bash cmd=&q ... -
CRLF escape
2013-08-06 17:51 1201最近需要对用户输入的CRLF即(\r\n)做escape, ... -
安全的自增类
2013-07-22 18:16 991java中一个计数器如果超过MAX_VALUE再自增会如何? ... -
solr日志被block的问题
2013-05-23 16:48 1265"catalina-exec-22386" ... -
beanMapper
2013-01-13 22:43 889实在被一堆get,set搞烦了,周末写了一个beanMappe ... -
java instanceof ,isInstance(),isAssignableFrom之前的差异
2013-01-06 11:00 962public class ItemQuery { ... -
通过gzip对字符串压缩
2012-12-22 18:10 3128通过GZIPOutputStream,GZIPInputStr ... -
关于URL编码
2012-12-21 14:18 1112一、问题的由来 URL就是网址,只要上网,就一定会用到。 ... -
spring的FactoryBean机制
2012-11-20 16:18 1240spring可以通过的FactoryBean的形式把一个Fac ... -
HashMap cpu占用 100%
2012-11-10 22:22 1815今天在重现出HashMap cpu占用100%了,只 ... -
文字扫描工具--java.util.Scanner
2012-11-10 14:33 1102A simple text scanner which c ... -
一个隐形的java int溢出
2012-11-06 22:17 1120故事的背景: 笔者最近在做一个类SNS的项目, ...
相关推荐
`synchronized`是Java语言提供的关键字之一,用于实现线程间的同步控制。通过在方法或代码块上使用`synchronized`,可以确保同一时间只有一个线程能访问这些代码区域,从而有效避免了多线程环境下的数据竞争和不一致...
在Java编程语言中,线程(Thread)、同步(synchronized)和并发(Concurrency)是核心概念,它们在多任务处理和高效系统设计中扮演着重要角色。本文将深入探讨这三个主题,以及它们如何相互作用以确保程序的正确性...
`synchronized`关键字是Java中实现线程安全的重要手段之一。通过将方法或代码块声明为同步,可以有效地防止多线程环境下可能出现的数据竞争和不一致性问题。需要注意的是,虽然`synchronized`能够提供强大的同步能力...
Java 中的 synchronized 关键字是用于解决多线程并发问题的重要工具之一。它可以被用于方法、代码块和变量上,以实现对共享资源的互斥访问控制。本文将对 Java 中的 synchronized 用法进行详细的解释和分析。 一、...
在深入探讨`synchronized`的关键知识点之前,我们先来明确`synchronized`在Java中的核心作用:它是一种用于实现线程同步的机制,确保了共享资源在多线程环境下的正确访问和修改,避免了数据不一致性和竞态条件等问题...
`synchronized`关键字在Java语言中扮演着极其重要的角色,它是实现线程安全的核心手段之一。通过`synchronized`关键字,开发人员可以在多线程环境中有效地控制对共享资源的访问,避免出现数据不一致的情况。 #### ...
Java synchronized 学习 Java 中的 synchronized 关键字是用来实现线程同步的,它可以用来修饰方法、代码块和静态方法,以确保在多线程环境下数据的一致性。 一、进程和线程的区别 在计算机中,每个运行着的 xxxx...
### Synchronized与ThreadLocal #### 一、Synchronized机制详解 **Synchronized** 是 Java 中一个非常重要的关键字,主要...这正是 ThreadLocal 的强大之处,它提供了一种简单而高效的方式来处理线程局部变量的问题。
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i); } } } public static void main(String[] args) { Thread1 t1 = new Thread1(); Thread ta = new Thread(t1, "A"); ...
- 无法中断正在等待获取锁的线程,除非抛出异常或者调用`Thread.interrupt()`。 - 不能知道哪个线程持有锁,也无法知道锁的状态。 **二、ReentrantLock** 1. **类库特性**: - `ReentrantLock`是Java并发包`...
Java中的`synchronized`关键字是用于实现线程同步的关键机制,它的主要目的是确保在多线程环境中,对共享资源的访问能够保持数据的一致性和完整性。本文将深入探讨`synchronized`的两种主要用法:synchronized方法和...
例子一展示了两个线程分别启动,它们都尝试访问同一个`Thread1`实例的`synchronized`方法。由于每次只有一个线程能执行同步代码,因此可以看到线程A先完成其循环,然后线程B才开始执行。 例子二展示了即使在一个...
`synchronized`是Java中用于实现线程同步的重要关键字之一。它可以修饰方法或代码块,保证同一时刻只有一个线程能够访问被修饰的部分,从而实现对共享资源的保护。当一个对象的实例方法或静态方法被`synchronized`...
在Java编程语言中,线程是程序执行的基本单位之一,它能够帮助我们实现多任务处理,提高程序运行效率。Java中的线程主要通过`java.lang.Thread`类来创建和管理。 #### 二、线程创建方式 在Java中,可以通过以下两...
Java synchronized锁住的对象解析 在Java编程中,synchronized关键字是用于同步的关键字,它可以用于锁住一个对象,以实现线程同步。但是,在使用synchronized关键字时,需要了解锁住的到底是哪个对象,否则可能...
`synchronized`关键字依赖于监视器对象(Monitor),每个对象都有一个与之关联的内置锁。当线程进入`synchronized`方法或同步代码块时,它会获取该对象的锁,其他线程必须等待锁被释放才能继续执行。 5. **可重入...
`synchronized` 是 Java 中的关键字之一,用于实现线程间的同步控制,确保共享资源的安全访问。它主要应用于以下两种场景: 1. **同步方法**:在类的方法声明前加上 `synchronized` 关键字,则该方法成为同步方法。...