线程创建和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