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多线程线程同步问题
线程同步 在多线程的编程环境下,可能看着没有问题的代码在运行几千上万或者更多次后,出现了一些看着很奇怪的问题,出现这样的问题的原因就是可能会有两个或者更多个线程进入了同一块业务处理代码中导致了判断失效 ...
随机推荐
- 页面引用jquery中文变乱码的问题
<script type="text/javascript" src="Js/JavaScript.js"></script> 方法 ...
- [UE4]角色、动画蓝图、动画蒙太奇、动画之间的调用关系
一.在“角色”中设置要使用的“动画蓝图” 二.在“动画蓝图”中使用“动画”和“混合动画” 三.在“混合动画”中,也可以使用“动画” 四.在角色中使用“动画蒙太奇”
- Linux网络编程经典书籍推荐
UNIX环境高级编程<高级unix环境编程><unix网络编程><深入理解计算机系统>比较好 =====================Linux网络编程经典书籍推 ...
- ubuntu 16.04 LTS 安装 teamviewer 13
背景介绍 由于需要做现场的远程支持,经协商后在现场的服务器上安装TeamViewer 以便后续操作. 本来以为很简单的一件事,谁知却稍微费了一番周折 :( 记录下来,希望提醒自己的同时也希望能够帮到 ...
- Jade简单教程
Express框架里内嵌了Jade模板引擎.正好项目里也要用到,本篇整理了下Jade的相关用法. 安装与执行 标签和属性 多行文本 变量 语句 Mixin 模板 注释 过滤器 安装与执行 安装很简单: ...
- python logging模块使用教程
简单使用 #!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') lo ...
- python中的运算符及表达式及常用内置函数
知识内容: 1.运算符与表达式 2.for\while初步了解 3.常用内置函数 一.运算符与表达式 python与其他语言一样支持大多数算数运算符.关系运算符.逻辑运算符以及位运算符,并且有和大多数 ...
- vb和c#插入行与删除行
vb: xSheet.Range(, ).Insert(Shift:=Excel.XlDirection.xlDown) xSheet.Range(, ).Delete() xSheet.Range( ...
- DB性能-隐式转换
1 什么是隐式转换 当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换.当然, 有些情况下有些类型是不可以发生转换的,比如说从DATE类型转换到N ...
- selenium+python自动化89-用例不通过的时候发送邮件
前言 实现需求:当测试用例全部通过的时候,不发邮件,当用例出现Error或Failure的时候发送邮件 解决思路:生成html测试报告后,用bs4解析html页面,写个函数判断页面上是都有不通过的记录 ...