`

线程之对象锁的同步异步问题

阅读更多
  • 同步需加synchronized关键字,同步是为了线程安全,而线程安全需要满足两个特性:原子性,可见性

示例:

package com.zan;


// 对象锁的同步和异步问题

public class TestObject {

	public synchronized void method1(){
		try {
			System.out.println(Thread.currentThread().getName());
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	// synchronized,注意看加与不加的运行结果 
	public synchronized void method2(){
			System.out.println(Thread.currentThread().getName());
	}
	
	/**
	 *  t1线程先持有object对象的锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法:
	 *   (运行结果:t1 t2同时打印出来)
	 *  
	 *  t1线程先持有object对象的锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步
	 *  (运行结果:t1先打印,间隔5s后 t2才打印出来)
	 */
	
	public static void main(String[] args) {
		
		final TestObject object = new TestObject();
		
		 new Thread(new Runnable() {
			@Override
			public void run() {
				object.method1();
			}
		},"t1").start();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				object.method2();
			}
		},"t2").start();
		
	}
	
}

 

分享到:
评论

相关推荐

    C#多线程,线程同步 异步 学习

    C#多线程学习资料,里面有关于C#多线程的介绍,包括线程的同步异步操作,代码锁,对象所,另外还介绍了ThreadPool的应用,是比较全面的多线程学习资料。

    .Net 多线程详解

    • 异步和多线程有什么关联 WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? ...

    Java多线程与并发-原理

    文章目录synchronized线程安全主要诱因互斥锁特性获取对象锁同对象,异步同对象,同步代码块同对象,非静态同步方法同对象,同步代码块 对比 非静态同步方法不同对象,同步代码块 对比 非静态同步方法获取类锁和对象...

    权威.NET多线程详解(源码示例)

    • 异步和多线程有什么关联 WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? ...

    多线程编程指南(系统描述了线程标准 线程同步 多线程编程原则 等)

    线程同步20 使用64 位体系结构20 2 基本线程编程23 线程库................................................................................................................................................. ...

    .net 线程详解 基础篇

    * 异步和多线程有什么关联 WinForm多线程编程篇 * 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? * Invoke,BeginInvoke干什么用的,内部是怎么实现的 * 每个线程都有消息队列吗? *...

    个人总结的深入java多线程开发

    6)同步锁synchronized 13 7)一个程序执行1秒之后自动退出 13 8)线程的状态 14 9)线程阻塞的条件(重要) 14 10) Interrupt()注意事项 16 三. 线程之间协作 17 1)演示简单的消费者和生产者的例子: 17 2)管道的读写流...

    java笔试题大集合及答案(另附各大公司笔试题)

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 62、同步和...

    JAVA实现Modbus RTU或Modbus TCPIP数据采集.rar

    3.java同步的几种方式:synchronized,volatile,显示锁,原子变量,线程及对象的基础同步方法。 4.所谓线程安全就是当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在...

    Java并发编程(学习笔记).xmind

    (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置交互 (3)简化异步事件的处理:服务器应用程序在接受...

    多线程编程指南PDF

    线程同步..............................................................................................................................................20 使用64 位体系结构.................................

    Java并发编程实战

    5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 CopyOnWriteArrayList 5.3 阻塞队列和...

    Java 并发编程实战

    5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 CopyOnWriteArrayList 5.3 阻塞队列和...

    Java 7并发编程实战手册

    如果你是一名Java开发人员,并且想进一步掌握并发编程和多线程技术,并挖掘Java 7并发的新特性,那么本书是你的合适之选。 《Java 7并发编程实战手册》 第1章 线程管理 1 1.1 简介 1 1.2 线程的创建和运行...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    CLR.via.C#.(中文第3版)(自制详细书签)

    25.7 使用专用线程执行异步的计算限制操作 25.8 使用线程的理由 25.9 线程调度和优先级 25.10 前台线程和后台线程 25.11 继续学习 第26章 计算限制的异步操作 26.1 CLR线程池基础 26.2 执行简单的计算限制...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段38讲、多线程Active Objects设计模式(接受异步消息的主动对象)-上.mp4 │ 高并发编程第二阶段39讲、多线程Active Objects设计模式(接受异步消息的主动对象)-中.mp4 │ 高并发编程第二阶段40...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段38讲、多线程Active Objects设计模式(接受异步消息的主动对象)-上.mp4 │ 高并发编程第二阶段39讲、多线程Active Objects设计模式(接受异步消息的主动对象)-中.mp4 │ 高并发编程第二阶段40...

Global site tag (gtag.js) - Google Analytics