⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample16_11.java

📁 Java SE 6.0前12-16章示的示例代码,简单易学
💻 JAVA
字号:
package wyf.jc;
//自定义线程类
class MyThread extends Thread
{
	//需要访问的两个资源对象引用
	private Object resource1;
	private Object resource2;
	//无参构造器
	public MyThread()
	{	}
	//有参构造器
	public MyThread(Object resource1,Object resource2,String name)
	{
		//传递资源对象的引用
		this.resource1=resource1;
		this.resource2=resource2;
		//设置线程的名称
		this.setName(name);
	}
	//重写run方法
	public void run()
	{
		//获得资源o1的锁,对资源o1进行操作
		synchronized(resource1)
		{
			System.out.println(this.getName()+"线程拿到"
			                 +resource1+"对象的锁!!!");
			//睡眠10毫秒
			try
			{
				Thread.sleep(10);
			}
			catch(Exception e)
			{	
			    e.printStackTrace();
			}
			System.out.println(this.getName()+"等待"
			            +resource1+"对象的锁释放!!!");
			//在拿着资源o1锁的同时,需要拿到
			//资源o2的缩对两个资源同时进行操作
			synchronized(resource2)
			{
				System.out.println(this.getName()
				+"线程拿到了"+resource2.toString()+"的锁!!!");
				System.out.println(this.getName()
				       +"可以对两个资源同时操作了!!!");
			}
		}
	}	
}
//主类
public class Sample16_11
{
	public static void main(String args[])
	{
		//创建3个资源对象
		String s1="tom";
		String s2="jerry";
		String s3="lucy";
		//创建3个线程对象
		MyThread mt1=new MyThread(s1,s2,"MT1");
		MyThread mt2=new MyThread(s2,s3,"MT2");
		MyThread mt3=new MyThread(s3,s1,"MT3");
		//启动上述3个线程
		mt1.start();
		mt2.start();
		mt3.start();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -