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多线程线程同步问题
线程同步 在多线程的编程环境下,可能看着没有问题的代码在运行几千上万或者更多次后,出现了一些看着很奇怪的问题,出现这样的问题的原因就是可能会有两个或者更多个线程进入了同一块业务处理代码中导致了判断失效 ...
随机推荐
- 6-3-2绕过appium的iOS测试
WDA自带的inspector 1.启动WDA Xcode启动:product-test,适合个人调试 命令行启动:适合持续集成 UDID=$(idevice_id -l) xcodebuild -p ...
- 查找占用CPU高线程
1.根据进程号查看线程 ps -mp pid -o THREAD,tid,time 2 把tid值转成16进制 printf "%x\n" tid 3.根据上面获取到的16进制数据 ...
- keras输出中间层结果,某一层的权重、偏置
转载:https://blog.csdn.net/hahajinbu/article/details/77982721 from keras.models import Sequential,Mode ...
- decorator的class方式
class式的 Decorator decorator的class方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 clas ...
- javascript通过改变滚动条滚动来显示某些元素的scrollIntoView()方法
scrollIntoView(b)可以在任何HTML上调用,通过滚动滚动条,调用的元素就可以出现在可视区域. 参数如果是true,或者不传参数,则表示调用元素的顶部与浏览器顶部平齐. 如果传入fals ...
- C#中char空值的几种表示方式
C#中char空值的几种表示方式 在C#中char类型的表示方式通常是用单引号作为分隔符,而字符串是用双引号作为分隔符. 例如: 程序代码 程序代码 char a = 'a'; char b = 'b ...
- php笔记篇(二)
mysql中key .primary key .unique key 与index区别(http://www.manongjc.com/article/1487.html) php is_file() ...
- 蓝瓶的钙,好喝的钙——windows,我要蓝屏的
原文地址:http://80x86.io/post/windows-blue-screen-0x00000050-page_fault_in_nonpaged_area 这里只截取一部分. windo ...
- SpringBoot入门篇--使用Thymeleaf模板引擎进行页面的渲染
在做WEB开发的时候,我们不可避免的就是在前端页面之间进行跳转,中间进行数据的查询等等操作.我们在使用SpringBoot之前包括我在内其实大部分都是用的是JSP页面,可以说使用的已经很熟悉.但是我们 ...
- python连接数据库(pymysql)及数据库加密
内容: 1.pymysql介绍 2.pymysql基本使用 3.数据库加密 参考:http://www.cnblogs.com/wupeiqi/articles/5713330.html 1.pymy ...