/**
* 容量为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());
}
}
java 多线程
最新推荐文章于 2023-11-07 13:47:28 发布