除了同步代码块能实现同步执行外,同步方法也可以。

先看下同步代码块实现同步执行:

public class Demo4 {
public static void main(String[] args) {
Demo d = new Demo(); new Thread() {
@Override
public void run(){
while (true){
d.print1();
}
}
}.start(); new Thread() {
@Override
public void run(){
while (true){
d.print2();
}
}
}.start();
}
} class Demo{
Object o = new Object();
public void print1(){
synchronized (o){ // synchronized ()传入一个对象即可,相当于一把锁
System.out.print("我");
System.out.print("好");
System.out.print("饿");
System.out.print("啊");
System.out.print("\n");
}
} public void print2(){
synchronized (o){ // synchronized () 传入的对象要和上面的一样
System.out.print("想");
System.out.print("吃");
System.out.print("汉");
System.out.print("堡");
System.out.print("包");
System.out.print("\n");
}
}
}

同步方法实现同步执行:

public class Demo5 {
public static void main(String[] args) {
Demo6 d = new Demo6();
new Thread() {
@Override
public void run(){
while (true){
d.print1();
}
}
}.start(); new Thread() {
@Override
public void run(){
while (true){
d.print2();
}
}
}.start();
} } class Demo6{
public synchronized void print1(){
System.out.print("我");
System.out.print("好");
System.out.print("饿");
System.out.print("啊");
System.out.print("\n");
} public synchronized void print2(){
System.out.print("想");
System.out.print("吃");
System.out.print("汉");
System.out.print("堡");
System.out.print("包");
System.out.print("\n");
}
}

同步方法的锁对象是什么呢?

在同步代码块实现同步执行的代码中,我们可以很清楚地看到锁对象是Object o(当然其他的也可以)。那么同步方法的锁对象是什么呢?

经过实验,发现:

非静态的同步方法的锁对象是this

静态的同步方法的锁对象是该类的字节码对象

同步方法-java的更多相关文章

  1. 瘋耔java语言笔记

    一◐ java概述                                                                                        1.1 ...

  2. 【收藏】Java多线程/并发编程大合集

    (一).[Java并发编程]并发编程大合集-兰亭风雨    [Java并发编程]实现多线程的两种方法    [Java并发编程]线程的中断    [Java并发编程]正确挂起.恢复.终止线程    [ ...

  3. ★Java多线程编程总结 系列 转

    下面是Java线程系列博文的一个编目:   Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Jav ...

  4. Java多线程编程总结(精华)

    Java多线程编程总结 2007-05-17 11:21:59 标签:多线程 java 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http ...

  5. java 线程学习

    转载:详见处http://lavasoft.blog.51cto.com/62575/27069   Java多线程编程总结   下面是Java线程系列博文的一个编目:   Java线程:概念与原理 ...

  6. (转)Java线程:大总结

    Java线程:大总结   Java线程是Java语言中一个非常重要的部分,Java5之前,多线程的语言支持还是比较弱的,内容也较少,写一个复杂的多线程程序是相当有挑战性的.   在Java5以后,Ja ...

  7. Java同步(Synchronization)

    前言 线程间的通信主要通过共享对字段的访问和对象引用字段的引用,可能会产生两种错误,线程干扰和内存一致性错误.Java的同步就是防止这些错误,但当多个线程访问同一资源会导致线程执行缓慢,甚至暂停执行. ...

  8. Java知多少(62)线程同步

    当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用.达到此目的的过程叫做同步(synchronization).像你所看到的,Java为此提供了独特的,语言水平上的 ...

  9. [Java][读书笔记]多线程编程

    前言:最近复习java,发现一本很好的资料,<J​a​v​a​2​参​考​大​全​ ​(​第​五​版​)​> ​ ​H​e​r​b​e​r​t​.Schildt.书比较老了,06年的,一些 ...

随机推荐

  1. MySQL - General error: 1390 Prepared statement contains too many placeholders

    报错原因:预处理 SQL语句时使用的占位符数量超过了最大限制(默认65535). 解决方案:拆分查询语句,每次使用的占位符低于限制即可.

  2. CodeForces.158A Next Round (水模拟)

    CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...

  3. AOJ.863 分书问题 (DFS)

    题意分析 现有n个人,n种书,给出每人对n种书的喜欢列表,求有多少种方案满足以下条件: 1.每个人都分得自己喜欢的书: 2.每个人分得书的种类各不相同,即所有种类的书均得到分配 1.采用生成测试法 生 ...

  4. LibreOJ #6190. 序列查询(线段树+剪枝)

    莫队貌似是过不了的,这题是我没见过的科技... 首先区间按右端点排序,然后一个扫描线,扫到某个区间右端点时候计算答案,线段树上节点的信息并不需要明确定义,我们只要求线段树做到当前扫到now时,查询[L ...

  5. openssl安装相关软件

    出现:error: openssl/md5.h: No such file or directory 原因是libssl-dev 没有安装,执行: sudo apt-get install libss ...

  6. Scrapy中的Callback如何传递多个参数

    在scrapy提交一个链接请求是用 Request(url,callback=func) 这种形式的,而parse只有一个response参数,如果自定义一个有多参数的parse可以考虑用下面的方法实 ...

  7. springboot整合thumbnailator实现图片压缩

    springboot整合thumbnailator实现图片压缩 前言 最近由于首页产品列表图片显示太慢,经过研究发现是用户上传的图片太大. 针对这个问题,想到的解决方案是: 1. 产品上传时,限定图片 ...

  8. html实现圆角矩形

    问题:如何通过div+css以及定位来实现圆角矩形? 解决方法概述: 内容:首先在<body>标签内部里添加一个大层(大层用来固定整体大框架),然后大层内包含四个小层(四个小层里分别放四个 ...

  9. 代码Review发现问题

    FrmMain.cs中存在问题 1. int i=0 设定为了全局常量且未在类顶部,出现问题时不好查找 i 属于常用临时变量,设定全局变量容易引起混乱 2.定义的全局变量但仅在一处方法中使用,定义全局 ...

  10. 洛谷2115 [USACO14MAR]破坏Sabotage

    https://www.luogu.org/problem/show?pid=2115 题目描述 Farmer John's arch-nemesis, Farmer Paul, has decide ...