Java并发编程---对象锁的同步和异步

来源:互联网 发布:数据融合方法概论 编辑:程序博客网 时间:2024/05/21 11:34

1.概念

  1.1 同步:synchronized

       同步的概念就是共享,如果不是共享的资源,就没有必要进行同步

  1.2  异步:asynchronized

       异步的概念就是独立,相互之间不受到任何制约.就好像我们学习http请求的时候,在页面发起的Ajax请求,我们还可以继续操作或浏览页面的内容,二者之间没有任何关系


  同步的目的就是为了线程安全,其实对于线程安全来说,需要满足两个特性:

      原子性(同步)

      可见性


2.代码示例

package com.thread.objectLock;/** * 对象锁的同步和异步问题 * @author lhy * @time 2017.12.22 */public class MyObject {    //有锁.同步方法public synchronized void method1(){try {System.out.println(Thread.currentThread().getName());Thread.sleep(4000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//无锁,异步方法public void method2(){System.out.println(Thread.currentThread().getName());}/** * 分析: * t1线程先持有Object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法 * t1线程先持有Object对象的Lock锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步 *  * 同步与异步交互,没有互相影响.同时出现 * 注意:如果数据是同步的或者都是异步的,要加一样的锁,保证数据的一致性 * @param args */public static void main(String[] args) {// TODO Auto-generated method stub        final MyObject mo = new MyObject();                        Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubmo.method1();}},"t1");                Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubmo.method2();}},"t2");                t1.start();        t2.start();}}

3.代码分析

     t1线程先持有Object对象的Lock锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待
     t1线程先持有Object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 广西崇左 崇左人才网 崇左论坛 崇左旅游 崇左红豆 崇左在哪里 崇左火车站 南宁崇左 崇左景点 在崇左 广西崇左市 崇左高铁 崇左邮编 崇左市旅游 崇左到南宁 南宁到崇左 崇左二手拖拉机 崇左论坛红豆社区 南宁到崇左火车时刻表 红豆社区崇左论坛 崇左红豆社区 崇左旅游景点 红豆崇左论坛 崇左招商项目排行 崇左市代理项目排行榜 崇左到南宁火车时刻表 广西崇左旅游景点 崇左到南宁汽车时刻表 广西崇左景点 崇左红豆论坛 崇左市人民医院 广西崇左旅游 广西崇左很穷吗 崇左人民医院 崇左二手面包车 南宁到崇左汽车 崇左幼儿师范高等专科学校 崇左市公共资源交易中心 在崇左公积金app 崇左红豆社区论坛 崇左旅游攻略