JAVA 8の新機能の使用:Lambda式===略記マルチスレッド


1:匿名の内部クラスの役割とは何か:クラスのサブクラスオブジェクトのショートカットフォーマットを一時的に作成する:new親/インタフェース(){書き換え方法};
二:コードの例:匿名の内部クラスを使用してスレッドを開く一般的な書き方:
class Runnable1 implements Runnable{
 @Override
 public void run() {
 for(int i = 0 ; i < 10 ;i++){
 System.out.println("    "+i);
 }
 }
}
public class RunnableTest {
 public static void main(String[] args) {
 for(int i = 0 ; i < 10 ; i++){
 System.out.println("   "+i);
 if(i==5){
 Thread th1 = new Thread(new Runnable1());
 th1.start();
 }
 }
 }
}


匿名内部クラスの書き方
class RunnableTest {
    public static void main(String[] args) {
        for(int i = 0 ; i < 10 ; i++){
            System.out.println("   "+i);
            if(i==5){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for(int i = 0 ; i < 10 ;i++){
                            System.out.println("    "+i);
                        }
                    }
                }).start();
            }
        }
    }}

Lambda式とは:lambda式を使用する前提
  • Lambdaを使用するには、インタフェースが必要であり、インタフェースに抽象的な方法が1つしかないことが要求される.JDKに内蔵されているRunnable、Comparatorインタフェース、カスタムインタフェースにかかわらず、Lambdaはインタフェース内の抽象的なメソッドが存在し、一意である場合にのみ使用できます.
  • メソッドのパラメータまたはローカル変数タイプは、Lambdaをインタフェースのインスタンスとして使用するには、Lambdaに対応するインタフェースタイプでなければなりません.

  • //マルチスレッドベース書き方
    () -> System.out.println("       !")
    

    遍歴:Intstrream.range(a,b).foreach()を利用
    class RunnableTest {
    
        public static void main(String[] args) {
            for(int i = 0 ; i < 10 ; i++){
                System.out.println("   "+i);
                if(i==5){
                    IntStream.range(1,5).forEach(a -> System.out.println(a +"    "));
    
                }
            }
        }
    }
    
    

    結果の一部:
       3
       4
       5
    1    
    2    
    3    
    4    
       6
       7