java的对象锁和对象传递

本文通过一个具体的Java示例介绍了对象锁的概念及其在多线程环境中的应用。演示了如何使用synchronized关键字实现对象级的互斥访问,确保线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,然后反复,说明对象被锁住

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值