1 . 资源类:放着资源的类叫资源类,资源是共享的
2 .需求
* 四个窗口 一共就卖100张票
* 四个窗口各自卖100张票子, 没有共享资源 extends Thread
* 四个窗口 一共卖100张票 , 有共享资源 实现 Runnable
3 .步骤:
* 1用类实现Runnable
* 2 创建Runnable实现类对象
* 3 创建Thread对象 将 Runnable实现类对象作为参数
* 4 Thead对象 调用start方法
对应代码:
package com.qf.demo5;
public class Test {
public static void main(String[] args) {
// 2 创建Runnable实现类对象
Window window = new Window();
// 3 创建Thread对象 将 Runnable实现类对象作为参数
// 注意: 多个线程都公用同一份资源
Thread thread = new Thread(window);
Thread thread2 = new Thread(window);
Thread thread3 = new Thread(window);
Thread thread4 = new Thread(window);
// 4 Thead对象 调用start方法
thread.start();
thread2.start();
thread3.start();
thread4.start();
}
}
/**
* 资源是共享,要保证一共只有100张票, Window 只能创建一次对象
*
* 放着资源的类 叫做 资源类
* @author Administrator
*
*/
class Window implements Runnable{
int tikcet = 100;
public void run() {
while(true){
if(tikcet>0){
tikcet--;
System.out.println(Thread.currentThread().getName()+"卖了第"+(100-tikcet)+"还剩下"+tikcet+"张");
}else{
break;
}
}
}
}
4 . 用静态属性可以实现同样的功能,但是不推荐这样的写法, 推荐的写法是用资源类实现 Runnable, 创建资源类对象.
package com.qf.demo5;
/**
* 用静态属性 可以实现同样的功能
* 但是不推荐这样的写法, 推荐的写法 用资源类实现 Runnable, 创建资源类对象
*/
public class Test3 {
public static void main(String[] args) {
Suger2 suger2 = new Suger2("二狗");
Suger2 suger3 = new Suger2("小香菇");
Suger2 suger4 = new Suger2("采姑娘的小蘑菇");
Suger2 suger5 = new Suger2("观海同志");
suger2.start();
suger3.start();
suger4.start();
suger5.start();
}
}
class Suger2 extends Thread{
public Suger2(String name) {
super(name);
}
static int count = 100;
@Override
public void run() {
while(true){
if(count>0){
count--;
System.out.println(Thread.currentThread().getName()+"同学,抢到了1块糖,还剩下"+count);
}else{
break;
}
}
}
}