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

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

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. Android中WebView的跨域漏洞分析和应用被克隆问题情景还原(免Root获取应用沙盒数据)

    一.前言 去年年底支付宝的被克隆漏洞被爆出,无独有偶就是腾讯干的,其实真正了解这个事件之后会发现,感觉是针对支付宝.因为这个漏洞找出肯定花费了很大劲,主要是因为支付宝的特殊业务需要开启了WebView ...

  2. BZOJ3040:最短路——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3040 题意rt,使用pb_ds的堆解决本问题. 所以其实就是mark一下的. 不过有人确认过官方不 ...

  3. Spring源码解析-JdbcTemplate

    JdbcTemplate类图 从类继承关系上来看,JdbcTemplate继承了基类JdbcAccessor和接口类JdbcOperation,在基类JdbcAccessor的设计中,对DataSou ...

  4. selenium - webdriver - ActionChains类(鼠标操作)

    ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionChains 中存储的行为: context_click(): 右击: double_click() ...

  5. Leetcode 138. 复制带随机指针的链表

    1.题目要求 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深度拷贝. 2.解题思路 (1)笔试思路(求速度,拿分数):使用哈希表 /* ...

  6. MEF——.NET中值得体验的精妙设计

    摘要:.NET 是 Microsoft XML Web services 平台.MEF是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的 ...

  7. [LeetCode] Merge Interval系列,题:Insert Interval,Merge Intervals

    Interval的合并时比较常见的一类题目,网上的Amazon面经上也有面试这道题的记录.这里以LeetCode上的例题做练习. Merge Intervals Given a collection ...

  8. [LeetCode] 10. Regular Expression Matching ☆☆☆☆☆

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  9. HDU 2154 跳舞毯 | DP | 递推 | 规律

    Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...

  10. 策略模式 C#

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 抽象策略角色: 策略类,通常由一个接口或者抽象类实现. 具体策略角色:包装了 ...