分享

java多线程按顺序读数据实例讲解 - Java 编程 - 编程开发 - 伊甸网

 昵称pds9i 2010-12-17
以下内容是根据本人的一些业务逻辑来做的一个dome,应该有很多地方还不完善,请大家看到的朋友可以指点一下程序的错误.
  DBTest.java
  package test.thread.test;
  /**
  * 模拟一个数据库加载数据
  *
  * @author wangzi6hao
  */
  public class DBTest {
  /**
  * 模拟初使化从数据库中加次数据
  */
  public static void initListObject() {
  for (int i = 1; i <= 10; i++)
  ListPool.list.add("linkedList" + i);
  }
  /**
  * 模拟list数据快使用完成时,再到数据库中加载数据.
  *
  * @param count
  *            添加的个数
  */
  public static void addListObject(int count) {
  String str = ListPool.list.getLast().replaceAll("linkedList", "");
  int k = Integer.parseInt(str);
  for (int i = 1; i <= count; i++) {
  int j = k + i;
  ListPool.list.add("linkedList" + j);
  }
  System.out.println("增加list后的大小:" + ListPool.list.size());
  }
  /**
  * 删除list数据
  */
  public static void removeListObject() {
  ListPool.list.remove(0);
  System.out.println("删除一个list后的大小:" + ListPool.list.size());
  }
  }
本文地址:【伊甸网】http://www./tech/devdeloper/java/2010-12-17/6857.html
===========================================================
  ListPool.java
  package test.thread.test;
  import java.util.LinkedList;
  public class ListPool {
  public static LinkedList<String> list = new LinkedList<String>();// 定义全局数据存放位置
  public final static int THREAD_COUNT = 10;// 定义最大启动线程个数
  }
  =============================================================
  DoSomething.java
  package test.thread.test;
  public class DoSomething implements Runnable {
  public void run() {
  try {
  while (true) {
  System.out.println("第一次得到大小:" + ListPool.list.size());
  while (ListPool.list.size() > 1) {// 必须保留最后一个,做为下一次更新时的起初id
  String info = "";
  synchronized (ListPool.list) {
  info = ListPool.list.get(0);
  DBTest.removeListObject();
  System.out.println("第二次得到大小:" + ListPool.list.size());
  if (ListPool.list.size() <= 5) {
  DBTest.addListObject(5);// 模拟从数据库中加载数据
  }
  }
  System.out.println(info);// 打印出内容,在现实中模拟到其它地方实现逻辑处理
  Thread.sleep((int) (Math.random() * 1000));//睡眠随机的毫秒,实现中可以改成1或者10毫秒,适当的释放资源给其它程序使用
  }
  System.out.println("测试执行");
  Thread.sleep(6 * 1000);
  DBTest.addListObject(5);
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  }
=================================================================
  TestMain.java
  import test.thread.test.DBTest;
  import test.thread.test.DoSomething;
  import test.thread.test.ListPool;
  public class TestMain {
  /**
  * @param args
  */
  public static void main(String[] args) {
  DBTest.initListObject();
  int threadCount = 1;
  try {
  while (threadCount < 1000) {// 必须保留最后一个,做为下一次更新时的起初id
  System.out.println("线程个数:" + threadCount);
  DoSomething doSomething = new DoSomething();
  Thread thread = new Thread(doSomething);
  //thread.setDaemon(true);//这里在tomcat或者其它的web应用程序方面启动线程时应该设置为true.在tomcat关闭的时候,线程也应该关闭.因为用户线程是基于jvm的,如果不设置为true(守护线程),tomcat关闭的时候,线程还会在运行,那会消耗cpu与内存的.
  thread.setDaemon(false);//在main方法中,这里必须设置为用户线程.因为设置为守护线程时,main方法执行完毕线程也自动退出了,事实上程序还没有执行完成.
  thread.start();
  threadCount++;
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多