review36
对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时,目标对象就会自动调用接口中的run()方法,因此,对于使用同一目标对象的线程,目标对象的成员变量自然就是线程共享的数据单元。
下面的例子中,房屋就是线程的目标对象,房屋中的一桶水被猫和狗共享。
public class Test07 {
public static void main(String[] args) {
// TODO Auto-generated method stub
House house = new House();
house.setWater(10);
Thread dog, cat;
dog = new Thread(house);
cat = new Thread(house);
dog.setName("狗");
cat.setName("猫");
dog.start();
cat.start();
}
}
House.java
public class House implements Runnable {
int waterAmount;
public void setWater(int w)
{
waterAmount = w;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
String name = Thread.currentThread().getName();
if(name.equals("狗"))
{
System.out.println(name + "喝水");
waterAmount = waterAmount -2;
}
else if(name.equals("猫"))
{
System.out.println(name + "喝水");
waterAmount = waterAmount - 1;
}
System.out.println(" 剩 " + waterAmount);
try{
Thread.sleep(2000);
}
catch(InterruptedException e){}
if(waterAmount <= 0)
{
return;
}
}
}
}
运行结果如下所示:

目标对象可以组合线程,即将线程作为自己的成员(弱耦合)。
可以这样改
public class Test01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
House house = new House();
house.setWater(10);
house.dog.start();
house.cat.start();
}
}
House.java
public class House implements Runnable {
int waterAmount;
Thread dog, cat;
House()
{
dog = new Thread(this);
cat = new Thread(this);
}
public void setWater(int water)
{
waterAmount = water;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
Thread thread = Thread.currentThread();
if(thread == dog)
{
System.out.println("家狗喝水 -2");
waterAmount = waterAmount - 2;
}
else if(thread == cat)
{
System.out.println("家猫喝水 -1");
waterAmount = waterAmount - 1;
}
try{
Thread.sleep(2000);
}
catch(InterruptedException e){}
if(waterAmount <= 0)
{
return;
}
}
}
}
运行结果如下所示:

review36的更多相关文章
随机推荐
- minimum viable product
w https://en.wikipedia.org/wiki/Minimum_viable_product
- 【python】-- web框架本质
web框架 一.web框架简述 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def handle_request( ...
- jQuery-PHP跨域请求数据
jQuery: //获取域名 function getDomain(url){ var a = document.createElement('a'); a.href = url; url=a.hos ...
- JavaWeb 之文件上传
1. 文件上传的要求 1.1 上传对表单的限制 method="post"; enctype="multipart/form-data"; 表单中需要添加文件表 ...
- JavaWeb 之监听器
1. JavaWeb 监听器概述 在 JavaWeb 被监听的事件源为: ServletContext, HttpSession, ServletRequest, 即三大域对象. 监听域对象" ...
- php安装pcntl扩展
1.下载一个同样版本的php(我的是php5.6.27,我下的是php5.6.28) [root@CentOS6 lamp]# wget http://hk1.php.net/get/php-5.6. ...
- nginx配置文件解析工具
最近花了一些时间自己实现解析nginx配置文件的功能,这里有个工具先记下以后用. https://github.com/nginxinc/crossplane
- Apache JServ Protocol (AJP)
The Apache JServ Protocol (AJP) is a binary protocol that can proxy inbound requests from a web serv ...
- android自定义控件(二)Canvas
一.重要方法 1.translate 2.scale 3.rotate 二.注意 1.明确顺序 canvas.rotate(45); canvas.drawRect(new Rect(50, 50, ...
- F110 BADI增强
F110*JOB*&------------------------------------------------------------- F110 BADI FI_BSTM_MC_EXI ...