线程之资源类

来源:互联网 发布:中国古代数学 知乎 编辑:程序博客网 时间:2024/06/14 05:15

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;            }        }    }}