java 多线程

/**
* 容量为10的 队列,多线程,线程要安全
* 容器为 集合,我选用linkedList,因为add 和 del 比较多,没说select的情况
* 内部元素为int、
*
* 其实这东西 底层用数组最好。一下就可以控制lenght
* @author wangfulin
*/
public class T {

    public static Q q;
    private _Add add = new _Add();
    private _Del del = new _Del();

    public static void main(String[] args) {

        int time = 200;// 运行次数
        for (int i = 0; i < time; i++) {
            q = Q.getInstance();
            new T().getAdd().start();
            new T().getDel().start();
            q.getSize();
        }
        // 备注,最后如果剩余数目不是0,那肯定是先执行的del()方法
        //也就是说,一开始就打印 对应个数的 0  !
     }
 
    _Add getAdd() {
        return new _Add();
    }
    _Del getDel() {
        return new _Del();
    }

      // 模拟调用对象
    class _Add extends Thread {
        public void run() {
            Q.getInstance().add(1);
        }
    }
    class _Del extends Thread {
        public void run() {
            Q.getInstance().del();

        }
    }
}
/**
* 多线程就要单例呗
* @author wangfulin
*/
class Q {
    public static List list = new LinkedList();
    public static Q q = new Q();
    private Q() {}
    public static Q getInstance() {
        return q;
    }
    public void add(int i) {
        synchronized (this) {
            while(list.size() >= 10) {
                del();
            }
            list.add(i);//这里保证了,最多不过10个
        }
    }
    public void del() {
        synchronized (this) {
            if (list.size() == 0) {
                return;
            }
            list.remove(list.size() - 1);
        }
    }
    public void getSize() {
        System.out.println(list.size());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值