マルチスレッド効率の問題


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