黑马程序员技术交流社区

标题: 为什么只有一个线程在运行 [打印本页]

作者: 心弦上的景致    时间: 2013-4-11 20:45
标题: 为什么只有一个线程在运行
  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. }
复制代码

作者: HM黄祥为    时间: 2013-4-11 21:12
不知道你是什么意思  在我得机器上运行 是100个线程都启动了
作者: 通行天下    时间: 2013-4-11 21:31
其实,在内存中的线程同步执行是指CPU在不同的时刻可以执行不同的线程,而且每个线程获得的执行机会是随机的;但是在一个时间点上,CPU只能执行一个线程;又由于CPU的执行速度很快,所以我们会觉得所有线程都是在同时被CPU所执行,其实不然。希望对你有用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2