• 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()));
    }
  • 相关阅读:
    springboot整合mongdb
    自动垃圾收集机制
    类加载机制
    MacBook 虚拟机的选择
    Spark 学习之 spark-sql.sh的简单使用
    spark 学习之 hadoop搭建之 ssh免密码登录
    userdel account is currently in use
    linux 磁盘管理
    qt ui文件转换成python
    opensuse安装telegram客户端小计
  • 原文地址:https://www.cnblogs.com/nongzihong/p/10010353.html
Copyright © 2020-2023  润新知