zoukankan      html  css  js  c++  java
  • java的对象锁和对象传递

    1、对象传递

    在JAVA的參数传递中,有两种类型,第一种是基本类型传递,比如int,float,double等,这样的是值传递,第二种是对象传递,比方String或者自己定义的类,这样的是引用传递。

    也就是说。基本类型传递的是一个副本,而对象传递的是对象本身。


    2、锁

    JAVA中,对象锁的概念。就是对对象进行加锁。每一个对象都会有一个内存锁,假设加上锁以后。就仅仅能让一个线程进行操作,在操作完毕之前,其它线程无法对该对象进行再次操作。

    3、样例

    package com.itbuluoge.mythread;
    
    class Common
    {
    	private int num;
    
    	public int getNum() {
    		return num;
    	}
    
    	public void setNum(int num) {
    		this.num = num;
    	}
    }
    class SyThread extends Thread
    {
    	private Common common;
    	public SyThread(Common common)
    	{
    		this.common=common;
    	}
    	public void run()
    	{
    		/*给传进来的对象加锁,其它线程就不能再操作*/
    		synchronized(common)
    		{
    			System.out.println("start.....");
    			try {
    				this.sleep(10000);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			System.out.println("over.....");
    		}
    	}
    }
    
    public class TestThread {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Common common=new Common();
    		/*对象传递。是引用传递。也就是说。是同个对象*/
    		SyThread first=new SyThread(common);
    		SyThread second=new SyThread(common);
    		
    		first.start();
    		second.start();
    	}
    
    }
    

    4、输出

    start.....
    over.....
    start.....
    over.....


    5、会先输出start然后等待10秒,继续输出over,然后反复,说明对象被锁住

  • 相关阅读:
    链表实现
    @Aspect
    mybatis plus
    using
    50道题
    梦想,青春,时间
    存储过程!!!
    事务,视图,索引
    高级查询--嵌套和相关,两套分页!!!
    学习笔记
  • 原文地址:https://www.cnblogs.com/llguanli/p/7211119.html
Copyright © 2011-2022 走看看