【问题如下】:
两个线程:线程A、线程B,一个固定容量为50的队列List<Integer> list.
线程A不停地产生100以内随机数,判断如果数据不在list中,就将数据加入list中;
线程B不停地产生100以内的随机数,判断如果数据存在list中,就从list中删除;
【示例代码】
package com.huas.thread;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 两个线程:线程A、线程B,一个固定容量为50的队列List<Integer> list.
* 线程A不停地产生100以内随机数,判断如果数据不在list中,就将数据加入list中;
* 线程B不停地产生100以内的随机数,判断如果数据存在list中,就从list中删除;
*
* @author GaoFeng
* @time 2018年5月28日下午12:44:30
* @todo http://cup.dnsxo.com
*/
public class SubjectDemo {
//多线程情况下由于ArrayList线程不安全
//List<Integer> list = new ArrayList<Integer>();
List<Integer> list = new CopyOnWriteArrayList<Integer>();
/**
* @author GaoFeng
* @time 2018年5月28日下午12:59:29
* @todo 将obj添加到列表
*/
public void add(Integer obj){
list.add(obj);
System.out.println("add new object:" + obj);
}
/**
* @author GaoFeng
* @time 2018年5月28日下午12:59:55
* @todo 将obj从列表中删除
*/
public void remove(Integer obj){
list.remove(obj);
System.out.println("remove repeat object:" + obj);
}
public static void main(String[] args) {
SubjectDemo sd = new SubjectDemo();
//线程A
Thread A_thread = new Thread(new Runnable() {
@Override
public void run() {
Random random = new Random();
Integer a;
List<Integer> list = sd.list;
while(list.size() < 50){
a = random.nextInt(100);
list = sd.list;
System.out.println("tA:" + a + ", list:" + list);
if(list.contains(a)){
sd.remove(a);
}
else{
sd.add(a);
}
}
}
});
//线程B
Thread B_thread = new Thread(new Runnable() {
@Override
public void run() {
Random random = new Random();
Integer a;
List<Integer> list = sd.list;
while(list.size() < 50){
a = random.nextInt(100);
list = sd.list;
System.out.println("tB:" + a + ", list:" + list);
if(list.contains(a)){
sd.remove(a);
}
else{
sd.add(a);
}
}
}
});
A_thread.start();
B_thread.start();
}
}