首先你需要理解线程是用来干啥的,每条线程代表一个动作,比如读取一批数据,这个只能是一个线程,读取一批数据,然后写入数据,这时,读和写可能用两个线程来完成,也就是说读的同时完成写。这个过程需要用到一个队列中(这里通常用的是队列Queue和其子类)来存储积压的数据,一个进程将读的数据一一写入集合,然后这个过程中写数据的进程将数据从队列(不同的队列有不同的特点)中取出来,然后写入数据库。
代码:
根据面向对象,可以建四个类,Read类,Write类,ReadWrite类,User实体类
1、ReadWrite类包装下队列类即可。
public class ReadWrite {
Queue<User> queue=new ConcurrentLinkedQueue<User>();
public void put(User user) {
queue.offer(user);
}
public User writedown() {
return queue.poll();
}
}
2、Read类和Write类要继承Thread或者实现Runnable来重写或者实现run()(继承或者实现接口后实例化后他们就是一个线程。只需放入线程池就可以运行。),在类中放入一个队列的包装,然后加一个有参构造。
public class Read {
private ReadWrite rw=new ReadWrite ();
public Read(ReadWrite rw){
this.rw=rw;
}
public void run(){
具体实现获取User,
rw.put(user);
}
}
public class Write{
private ReadWrite rw=new ReadWrite ();
public Write(ReadWrite rw){
this.rw=rw;
}
public void run(){
User user=rw.writedown();
然后处理user;
}
}
3、main方法:
ExecutorService pool = Executors.newFixedThreadPool(4); 创建一个线程池
ReadWrite readWrite=new ReadWrite ();//实例化队列
Reader read=new Reader(readWrite);
Write write=new Write(readWrite);
pool .submit(read);
pool .submit(write);
pool.shutdown();