Java的线程同步
synchronized获取的锁是对象,而不是函数或语句块。
项目结构
资源类
import java.util.concurrent.TimeUnit; public class myResource {
public void x(){
System.out.println(Thread.currentThread().getName()+" :等待进入 synchronized in x方法");
synchronized (this) {
for(int i = 0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" : synchronized in x方法");
try {
TimeUnit.MILLISECONDS.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void y(){
System.out.println(Thread.currentThread().getName()+" :等待进入 synchronized in y方法");
synchronized (this) {
for(int i = 0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" : synchronized in y方法");
try {
TimeUnit.MILLISECONDS.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void z(){
System.out.println(Thread.currentThread().getName()+" :等待进入 synchronized in z方法");
synchronized (this) {
for(int i = 0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" : synchronized in z方法");
try {
TimeUnit.MILLISECONDS.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
运行类
public class Test { public static void main(String[] args) {
myResource resource = new myResource();
// 线程0
new Thread(){
public void run() {
resource.x();
};
}.start();
// 线程1
new Thread(){
public void run() {
resource.y();
};
}.start();
// 线程main
resource.z();
} }
运行结果
Thread-0 :等待进入 synchronized in x方法
Thread-0 : synchronized in x方法
Thread-1 :等待进入 synchronized in y方法
main :等待进入 synchronized in z方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
Thread-0 : synchronized in x方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
main : synchronized in z方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Thread-1 : synchronized in y方法
Java的线程同步的更多相关文章
- Java 并发 线程同步
Java 并发 线程同步 @author ixenos 同步 1.异步线程本身包含了执行时需要的数据和方法,不需要外部提供的资源和方法,在执行时也不关心与其并发执行的其他线程的状态和行为 2.然而,大 ...
- Java中线程同步的理解 - 其实应该叫做Java线程排队
Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可 ...
- java中线程同步的理解(非常通俗易懂)
转载至:https://blog.csdn.net/u012179540/article/details/40685207 Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运 ...
- JAVA中线程同步的方法(7种)汇总
同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就 ...
- Java多线程——线程同步
在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系.可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题.现在就来学习多线程对数据访问的 ...
- Java并发——线程同步Volatile与Synchronized详解
0. 前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52370068 面试时很可能遇到这样一个问题:使用volatile修饰in ...
- Java中线程同步的方法
同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态. 注 ...
- Java中线程同步的理解
我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可能和其他线程共享一些资源, ...
- Java多线程 - 线程同步
多线程操作同一个对象时,容易引发线程安全问题.为了解决线程安全问题,Java多线程引入了同步监视器. 同步代码块 同步代码块语法格式如下: synchronized(obj){ //此处的代码即为同步 ...
- JAVA多线程线程同步问题
线程同步 在多线程的编程环境下,可能看着没有问题的代码在运行几千上万或者更多次后,出现了一些看着很奇怪的问题,出现这样的问题的原因就是可能会有两个或者更多个线程进入了同一块业务处理代码中导致了判断失效 ...
随机推荐
- HDU 2063 过山车(匈牙利算法)
过山车 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- 开发框架-APP:Hybird App
ylbtech-开发框架-APP:Hybird App Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体 ...
- js中级总结
this问题: this是JavaScript的关键字 用途:指向某一个对象 如何判断this的指向 函数内:两种情况:1.以函数形式调用(不带 . 指向window ) 2.以方法形式调用 ...
- td高度不随内容变化display:block;display:block;display:block;display:block;display:block;
在TD里加个DIV就可以解决!CSS对应改成#aaa td div{ height:236px; overflow:hidden; 在TD里加个DIV就可以解决!CSS对应改成#aaa td div{ ...
- 3dsMax模型转UE4
转自:http://blog.csdn.net/qq_24835213/article/details/68063344 一.模型设置: 1.将Vary材质转成标准材质 2.将模型减面 3.加一套UV ...
- Windows环境下多版本JDK切换
因为有切换多个版本的JDK需求,但是本机的JDK安装比较混乱(因为不是我最先使用的),所以出现了一些问题在这里记录下.本来我以为只需要修改环境变量中的JAVA_HOME环境路径即可,如果没有配置JAV ...
- 全国城市空气质量实时数据(PM2.5)实时下载
国家公布了“http://113.108.142.147:20035/emcpublish/”空气质量实时发布平台,WCF服务地址为“http://113.108.142.147:20035/EnvP ...
- hive的安装,一般不容易察觉的hdfs的配置问题导致hive安装的失败
在安装hive的过程中,一般需要的准备环境就是hadoop集群的正常启动,要装有mysql,zookeeper. 具体怎么安装配置我在这里不多说,安装教程网上有挺多的. 我这里说下我遇到的问题,首先从 ...
- ORM( ORM查询13种方法3. 单表的双下划线的使用 4. 外键的方法 5. 多对多的方法 ,聚合,分组,F查询,Q查询,事务 )
必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或 ...
- os模块和sys模块,以及random模块
os模块 os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工 ...