我想重复同时执行4个线程并同时睡眠。但问题是,在获得少数正确的序列数据后,很少有数据显示不同的时间。我得到了以下输出
dtime data
21-MAY-16 09.38.31.031000 AM .2652487
21-MAY-16 09.38.31.031000 AM .21100356
21-MAY-16 09.38.31.031000 AM .39925393
21-MAY-16 09.38.31.031000 AM .32884327
21-MAY-16 09.38.33.046000 AM .08516244
21-MAY-16 09.38.33.046000 AM .701089
21-MAY-16 09.38.33.046000 AM .9537386
21-MAY-16 09.38.33.086000 AM .0397367
以下是摘录:
public class TestConnection {
public static void main(String[] args) {
Thread t1=new Thread(new TestingThread(),"t1");
Thread t4=new Thread(new TestingThread(),"t4");
t1.start();
t4.start();
}
}
public class TestingThread implements Runnable{
@Override
public void run(){
try{
doDB();
}
catch(InterruptedException e){
System.out.println(e);
}
}
private void doDB() throws InterruptedException {
Connection conn;
PreparedStatement pstmt;
try
{
/* Create Connection objects */
conn= ....;
/* Create the insert statement */
String insertQuery = ".....";
pstmt = conn.prepareStatement(insertQuery);
for(int i=1;i<3;i++)
{
pstmt.setTimestamp(1, getCurrentTimeStamp());
pstmt.setFloat(2, (float) Math.random());
i=pstmt.executeUpdate();
}
try{
if(conn!=null){
conn.commit();
conn.close();
}
}
catch(SQLException se){
se.printStackTrace();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
在调用start()
方法后,您无法控制这些线程。
这是负责运行这些线程的底层操作系统,大多数情况下(特别是如果核心数和&lt;同时执行的线程数)两个线程不并行运行。
因此,无法确定线程何时执行!
答案 1 :(得分:1)
从java端同时运行完全的多个线程是不可能的,因为它是OS的调度责任。如果线程数大于CPU数,则必须有某种时间共享。即使线程数等于或小于CPU的数量,在我有限的知识中,仍然很难让线程在不同的CPU上同时运行。
在java视图中,您可以让一组线程处于同一状态,以CyclicBarrier为例。
有关详细信息,请参阅How to start two threads at “exactly” the same time。
希望它会有所帮助。 THX