A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心弦上的景致 中级黑马   /  2013-4-11 20:45  /  1137 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.sql.*;
  2. public class AddRecord {
  3. public static int COUNT = 1000000;
  4. public static int THREAD_NUM = 100;
  5. public static String sql = "INSERT table1(id,password) VALUES(?,?)";
  6. public static void main(String[] args) {
  7.   int start = 0;//每个线程开始的位置
  8.   int count = COUNT / THREAD_NUM;//每个线程分配的任务量
  9.   for(int i = 0; i < THREAD_NUM; i++) {
  10.    String threadName = "{ " + i + " }";//线程名
  11.    System.out.println("Start Thread : " + threadName);
  12.    new AddThread(threadName, start, count).start();
  13.    start +=count;
  14.   }
  15. }
  16. }

  17. class AddThread extends Thread {
  18. private int start,count;
  19. public AddThread(String name, int start, int count) {
  20.   super(name);
  21.   this.start = start;
  22.   this.count = count;
  23. }

  24. public void run() {
  25.   try {
  26.    int finished = 1;
  27.    Class.forName("org.gjt.mm.mysql.Driver").newInstance();
  28.    Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?" +
  29.     "user=root&password=123456&useUnicode=true");
  30.    PreparedStatement ps = con.prepareStatement(AddRecord.sql);
  31.    
  32.    for (int i = start; i < count; i++) {
  33.     String pw = "password"+i;
  34.     ps.setInt(1, i);
  35.     ps.setString(2,pw);
  36.     ps.execute();
  37.    
  38.     if(i >= (start+count*finished/100)) {
  39.      System.out.println("Thread : " + getName() + "complete " + finished + "%");
  40.      finished++;
  41.     }
  42.    }
  43.   } catch (Exception e) {
  44.    System.err.println("Thread : " + getName() + "error!exit");
  45.   }
  46. }
  47. }
复制代码

2 个回复

倒序浏览
不知道你是什么意思  在我得机器上运行 是100个线程都启动了
回复 使用道具 举报
其实,在内存中的线程同步执行是指CPU在不同的时刻可以执行不同的线程,而且每个线程获得的执行机会是随机的;但是在一个时间点上,CPU只能执行一个线程;又由于CPU的执行速度很快,所以我们会觉得所有线程都是在同时被CPU所执行,其实不然。希望对你有用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马