美文网首页
使用Java的匿名内部类创建单个线程和多个线程的代码

使用Java的匿名内部类创建单个线程和多个线程的代码

作者: 希望是水户洋平 | 来源:发表于2020-11-10 17:06 被阅读0次

    适用场景

    用匿名内部类或者lambda表达式创建的线程的优点是简洁方便,但是因为没有生产具体的对象实例(如下列代码中的t1,t2),所以用匿名内部类或者lambda表达式创建的线程只适用于该线程只使用一次的情况。

    Thread t1 = new Thread(blt::syncMethod, "T1");
    Thread t2 = new Thread(blt::otherFunction, "T2");
    

    具体例子

    在明白适用场景之后,就可以愉快地敲代码了。首先是用匿名内部类或lambda表达式创建单个线程的代码的例子:

    //匿名内部类写法
    new Thread() {
        @Override
        public void run() {
            //do some thing
        }
    
    , "ThreadName"}.start();
    
    //lambda表达式的写法
    
    //例1
    new Thread(TryConcurrency::enjoy)..start();
    
    //例2
    new Thread(() -> {
                    for (; ; ) {
                        try {
                            myEventQueue.take();
                            TimeUnit.MILLISECONDS.sleep(15); //假设客户端提交event几乎
                            // 不消耗时间,而消费event相比需要更多时间。
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                    }
                }, "Consumer" ).start();
    
    

    创建多个线程的写法:加个循环或用JDK8引入的Stream特性。一般而言for循环代码可读性比较强,使用Stream特性的话代码简洁但可读性受损。

    //用for循环创建多个线程的例子,创建了10个线程
    for (int i = 0; i < 10; i++) {
    
                new Thread(() -> {
                    for (; ; ) {
                        try {
                            myEventQueue.take();
                            TimeUnit.MILLISECONDS.sleep(15); //假设客户端提交event几乎
                            // 不消耗时间,而消费event相比需要更多时间。
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                    }
                }, "Consumer_" + i).start();
        }
    
    
    //这是使用JDK8的Stream新特性来创造多个新的线程,创建了10个线程
            IntStream.range(0,10)
                    .mapToObj(i -> new Thread(blt::syncMethod))
                    .forEach(Thread::start);
    
    

    参考书籍:《Java高并发编程详解:多线程与架构设计(汪文君 著)》

    相关文章

      网友评论

          本文标题:使用Java的匿名内部类创建单个线程和多个线程的代码

          本文链接:https://www.haomeiwen.com/subject/anyjbktx.html