線程創建和lambda表達式


繼承Thread類

public class TestThread1 extends Thread{
    @Override
    public void run() {
        //run方法線程體
        for (int i = 0; i < 20; i++) {
            System.out.println("我在看代碼"+i);
        }

    }

    public static void main(String[] args) {
        TestThread1 testThread1 = new TestThread1();
        testThread1.start();

        for (int i = 0; i < 200; i++) {
            System.out.println("學習多線程"+i);
        }
    }
}

實現Runnable接口

public class TestThread3 implements Runnable {

    private int keeps = 1000;
    private static String  winner;

    @Override
    public void run() {
        for (int i = 0; i <= keeps; i++) {
            if (Thread.currentThread().getName().equals("兔子")&& i % 100 == 0){
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("sleep異常");
                }
            }

            boolean flag = getover(i);
            if (flag){
                break;
            }
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
        }
    }

    private boolean getover(int steps){
        if(winner!=null){
            return true;
        }else {
            if (steps>=keeps){
                winner = Thread.currentThread().getName();
                System.out.println("winner is"+winner);
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        TestThread3 testThread3 = new TestThread3();
        new Thread(testThread3,"兔子").start();
        new Thread(testThread3,"烏龜").start();
    }
}

實現Callable接口

public class TestCallable implements Callable<Boolean> {

    private String url;
    private String name;

    public TestCallable(String url,String name){
        this.url = url;
        this.name = name;
    }

    @Override
    public Boolean call() {
        WebDownloader webDownloader = new WebDownloader();
        webDownloader.downloader(url,name);
        System.out.println("下載了"+name);
        return true;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        TestCallable t1 = new TestCallable("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Fdc%2Fd2%2Fe3%2Fdcd2e350f4fcae5d336b04756417c6dd.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1638586630&t=0b7741b43b914858e2224f6ed0490ccf","1.jpg");
        TestCallable t2 = new TestCallable("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.veryhuo.com%2Fupload%2F20201229%2Fb7c63d0876d7ddab0cd11f5845804269.jpg&refer=http%3A%2F%2Fpic.veryhuo.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1638586630&t=9d81ed2efdc7798d43cee262a888cbe6","2.jpg");
        TestCallable t3 = new TestCallable("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_360_360%2F55%2F6b%2F77%2F556b7738c6617debe1ee38cd573cab81.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1638586630&t=e64e27cde02b76c37c907bd3f6d85a1d","3.jpg");

        ExecutorService ser = Executors.newFixedThreadPool(3);

        Future<Boolean> r1 = ser.submit(t1);
        Future<Boolean> r2 = ser.submit(t2);
        Future<Boolean> r3 = ser.submit(t3);

        boolean rs1 = r1.get();
        boolean rs2 = r2.get();
        boolean rs3 = r3.get();

        System.out.println(rs1);
        System.out.println(rs2);
        System.out.println(rs3);

        ser.shutdownNow();
    }
}

class WebDownloader{
    public void downloader(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("異常");
        }
    }
}

lambda表達式

public class TestLambda {

    //靜態內部類
    static class Like2 implements Ilike{

        @Override
        public void lambda() {
            System.out.println("I am lambda2");
        }
    }

    public static void main(String[] args) {
        Ilike like = new Like();
        like.lambda();

        like = new Like2();
        like.lambda();

        //局部內部類
        class Like3 implements Ilike{

            @Override
            public void lambda() {
                System.out.println("I am lambda3");
            }
        }

        like = new Like3();
        like.lambda();

        //匿名內部類 沒有類的名稱,必須借助接口或父類
        like = new Ilike() {
            @Override
            public void lambda(){
                System.out.println("I am lambda4");
            }
        };
        like.lambda();

        //用lambda簡化
        like = ()->{
            System.out.println("I am lambda5");
        };
        //總結:
        //lambda表達式只有一行代碼的情況下才能簡化成為一行,如果有多行,那么就用代碼塊包裹。
        //前提是接口為函數式接口
        //多個參數也可以去掉參數類型,要去掉就都去掉,必須加上括號

        like.lambda();
    }

}

//定義一個函數式接口
interface Ilike{
    void lambda();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM