多线程-多线程及同步

此种编写适合:
即存在多线程情况,又存在资源共享线程不安全时需要同步的情况。

首先建立资源类–这个类是具体干活的类,需要实现的方法写这里。
每次需要根据实际需求重新编写。

public class Zyl {           //建立一个资源类
private int ps;
public Zyl(int ps){           //构造方法传参(ps)
	this.ps=ps;
}
public synchronized boolean mp(){  //方法名前用synchronized(同步)修饰,有布尔类型返回值
	boolean fhz=false;             //fhz初始赋值为false
	if(ps>0){
		try {
			Thread.sleep(100);   //每次ps取值后调用静态方法休眠100毫秒
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	ps--;
	System.out.println(Thread.currentThread().getName()+"卖出一票,还剩"+ps+"票");
	}else{
		fhz=true;                   //ps<=0时fhz重新赋值为true
	}
	return fhz;
}

建立线程类,这个类是把资源类对象传参进来,重写run方法里面调用资源类方法干活,是固定的,只需少量改动或不改动

package abc;
public class Xcl implements Runnable{      //建立一个线程类 实现Runnable接口
     private Zyl zyl;
     public Xcl(Zyl zyl){   //构造方法传参 (资源类对象)
    	 this.zyl=zyl;
     }
     public void run(){     //重写run方法
    	 while(true){             //死循环
    		 if(zyl.mp()){      //为退出做条件,如果mp返回值为真则退出
    			 break;
    		 }
    		 zyl.mp();           //传参来的zyl对象执行mp方法
    	 }
     }
}

建立执行类,
这个类是建资源类对象传参,
建线程类对象把资源类对象传参进去,
再把线程类对象传参给新建的几个多线程对象
这个类也是固定的,少许改动或不改动。

package abc;
 public class Zxl {                                 //建立一个执行类 (建多个Thread对象)
	public static void main(String[] args) {
		Zyl mm=new Zyl(300);                  //资源类建对象 传参实际总开始票数
		Runnable cc=new Xcl(mm);             //线程类建对象 传参资源类对象
		Thread ck1=new Thread(cc,"张学友"); //根据需要建三个线程对象		
        Thread ck2=new Thread(cc,"刘德华");   //并传参线程对象和每个线程的实际名字
		Thread ck3=new Thread(cc,"郭富城");
		ck1.start();          //每个线程分别调用start方法去抢先执行run方法
		ck2.start();
		ck3.start();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值