マルチスレッド効率の問題
package ThreadTest;
public class ThreadTest3 {
public static void main(String args[]){
MyThread mt = new MyThread() ; //
Thread t1 = new Thread(mt) ; // Thread
// Thread t2 = new Thread(mt) ; // Thread
// Thread t3 = new Thread(mt) ; // Thread
t1.start() ;
// t2.start() ;
// t3.start() ;
}
}
class MyThread implements Runnable{
private int ticket = 5 ; // 5
private long start = 0;
public void run(){
sale();
}
private synchronized void sale(){
if (start == 0){
start = System.currentTimeMillis();
}
while(ticket>0){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" :ticket = " + ticket-- );
}
if (ticket == 0){
System.out.println("cost" + (System.currentTimeMillis() - start));
}
}
}
cost1515
スレッド同期では,マルチスレッドと単一スレッドを用いた時間はいずれも1515 msであり,マルチスレッド効率は単一スレッド効率よりも高くない.
スレッドの非同期では,マルチスレッド時間を用いても906 msの間であり,マルチスレッド効率は単一スレッド効率よりも高い
package ThreadTest;
public class ThreadTest3 {
public static void main(String args[]){
MyThread mt = new MyThread() ; //
Thread t1 = new Thread(mt) ; // Thread
Thread t2 = new Thread(mt) ; // Thread
Thread t3 = new Thread(mt) ; // Thread
t1.start() ;
t2.start() ;
t3.start() ;
}
}
class MyThread implements Runnable{
private int ticket = 5 ; // 5
private long start = 0;
public void run(){
sale();
}
// private synchronized void sale(){
private void sale(){
if (start == 0){
start = System.currentTimeMillis();
System.out.println("cost");
}
while(ticket>0){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" :ticket = " + ticket-- );
}
if (ticket <= 0){
System.out.println("cost" + (System.currentTimeMillis() - start));
}
}
}
cost
チケット販売:チケット=5
チケット販売:チケット=5
チケット販売:チケット=4
チケット販売:チケット=3
チケット販売:チケット=2
チケット販売:チケット=3
チケット販売:チケット=1
cost907
チケット販売:チケット=0
チケット販売:チケット=1
cost907
cost907