zoukankan      html  css  js  c++  java
  • java中Thread (线程)

    Thread

    使用新线程的步骤:

    1. 通过覆写 Thread 的 run 方法,配置新线程需要做的事情
    2. 创建新线程对象 new YourThread()
    3. 开启线程 start

    创建新线程的方法有很多,下面是一个示例:

    class MyThread extends Thread {
        @Override
        public void run () {
            System.out.println("在新的线程内运行的任务。这任务是独立的,不会影响主线程代码执行。");
        }
    }
    public class Main {
        public static void main (String... args) {
            Thread myThread = new MyThread();   // 创建线程
            mythread.start();                   // 运行线程
        }
    }

    也可以这样:

    class MyThread implements Runnable {
        @Override
        public void run () {
            System.out.println("在新的线程内运行的任务。这任务是独立的,不会影响主线程代码执行。");
        }
    }
    public class Main {
        public static void main (String... args) {
            Thread myThread = new Thread(new MyThread());   // 创建线程
            mythread.start();                               // 运行线程
        }
    }

    上面代码可以简写为:

    // 使用匿名内部类进行简化
    public class Main {
        public static void main (String... args) {
            Thread myThread = new Thread () {
                    @Override
                    public void run () {
                        System.out.println("在新的线程内运行的任务。这任务是独立的,不会影响主线程代码执行。");
                    }
                };
            myThread.start();
        }
    }

    使用 jdk8 的语法,甚至可以简化为:

    public class Main {
        public static void main (String... args) {
            new Thread(() -> System.out.println("task")).start();
        }
    }

    其他:

    t.join()
    让当前线程阻塞并等待线程 t 结束再执行接下来代码
    Thread.sleep()
    让当前线程暂时休眠 n 毫秒,这过程不会释放所占用的对象锁
    Thread.yield()
    暂时退让,优先让其他线程先运行。如果没有线程在这个过程中抢占运行权,则继续运行
    Executors 是一个常用的静态类,内置了很多线程池相关的操作。

    线程池使用的基本语法:

    // 1. 创建线程池
    ExecutorService service = Executors.newCachedThreadPool();
    
    // 2. 创建任务
    Runnable task = new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread());
            }
        };
    
    // 3. 使用线程池调度任务
    for (int i = 0; i < 1000; i++) {
        service.execute(task);
    }
    
    // 4. 关闭线程池
    service.shutdown();

    可以简化为:

    ExecutorService service = Executors.newCachedThreadPool();
    
    for (int i = 0; i < count; i++) {
        service.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread());
                }
            });
    }

    可以进一步简化为(jdk8语法):

    ExecutorService service = Executors.newCachedThreadPool();
    
    for (int i = 0; i < count; i++) {
        service.execute(() -> System.out.println(Thread.currentThread()));
    }
  • 相关阅读:
    部分源码:Visual Studio 2019 C运行时库(CRT)部分源码
    反思:中国歌手和欧美歌手的比较
    lol:lol 10分钟前上路到线小兵107只
    OS:RPM包的通用命名规则(转载)
    OS: kali linux的安装和配置
    OS_linux:Systemd 文档
    visual studio 2019 插件安装(插件扩展名vsix)
    解决git合并冲突问题
    nodejs封装的MongoDB的增删改查方法
    vue项目中购物车的全选功能的实现
  • 原文地址:https://www.cnblogs.com/nongzihong/p/10010353.html
Copyright © 2011-2022 走看看