zoukankan      html  css  js  c++  java
  • 线程安全-003-对象锁的同步和异步

    对象锁的同步和异步

     例子程序:

    package com.lhy.thread01;
    
    /**
     * 对象锁的同步和异步问题
     * @author dev
     */
    public class MyObject {
        
        //synchronized
        public synchronized void m1(){
            try {
                System.err.println(Thread.currentThread().getName());
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //synchronized
        public  void m2(){
            try {
                System.err.println(Thread.currentThread().getName());
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }        
        
        public static void main(String[] args) {
    
            final MyObject obj = new MyObject();
            /**
             * 分析:
             * t1线程先持有obj对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchornized修饰的方法
             * t1线程先持有obj对象的Lock锁,t2线程如果在这个时候调用对象中的同步(synchornized)方法则需等待,也就是同步
             */
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    obj.m1();
                }
            },"t1");
            
            Thread t2 = new Thread(new Runnable() {
                @Override
                public void run() {
                    obj.m2();
                }
            },"t2");
            
            t1.start();
            t2.start();
        }
    
    }

    打印结果:

    m1方法加了synchornized,是同步的,m2方法没有加synchornized,是异步的,t1、和 t2线程虽然都执行的是MyObject的对象的方法,但是由于m2是异步的方法,跟m1没关系,所以直接打印出了。

    如果将m2方法也加上synchornized修饰,此时t1、t2线程,都执行的是obj对象的方法,t1或者t2,谁先执行后,就获得了对象锁,不释放锁,另一个线程就得等着。

  • 相关阅读:
    轻松完成mysql4.1与mysql4.0数据库转换备份
    MYSQL数据迁徙tips,ORA00907: missing right parenthesis
    viking病毒再次感染公司LAN
    [恢]hdu 2032
    [恢]hdu 2042
    [恢]hdu 2033
    [恢]hdu 2039
    [恢]hdu 2029
    [恢]hdu 2010
    [恢]hdu 2016
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/10539817.html
Copyright © 2011-2022 走看看