• JAVA高级复习-多线程创建方式一


    一、多线程创建

    可以通过两种方式创建多线程。

    方式一:继承Thread类

    1、创建一个继承于Thread类的子类
    2、重写Thread类的run() --> 将此线程执行的操作声明在run()中
    3、创建Thread类的子类的对象
    4、通过此对象调用start()

    /**
     * @description:多线程的创建:两种方式
     * @date: 2020/7/25 10:32
     * @author: winson
     */
    public class CreateThread {
        public static void main(String[] args) {
            MyThread t1 = new MyThread();
            t1.start();
            //如果直接调用父类的run方法,并不会开启新线程,还是在mian线程中执行方法;
            //问题一:我们不能通过直接调用run方法的方式启动线程;
            //t1.run();
    
            //问题二:再启动一个线程,遍历50内的偶数,不可以还让已经start()的线程去执行,会报java.lang.IllegalThreadStateException异常
            //我们需要重新创建一个线程的实例对象;
            MyThread t2 = new MyThread();
            t2.start();
            for (int i = 0; i < 50; i++) {
                if (i % 2 == 0) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
            }
        }
    }
    
    /**
     * 方式一:继承Thread类
     * 1、创建一个继承于Thread类的子类
     * 2、重写Thread类的run() --> 将此线程执行的操作声明在run()中
     * 3、创建Thread类的子类的对象
     * 4、通过此对象调用start()
     */
    
    class MyThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 50; i++) {
                if (i % 2 == 0) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
            }
        }
    }
    

    start()方法的作用:1、使该线程开始执行;2、Java 虚拟机调用该线程的 run()方法。如果直接调用父类的run()方法,此不会开启新线程,还是在mian()线程中执行方法;

    总结:

    问题一:我们不能通过直接调用run()方法的方式启动线程;如果直接调用父类的run()方法,并不会开启新线程,还是在mian()线程中执行方法;

    问题二:再启动一个线程,遍历50内的偶数,不可以还让已经start()的线程去执行,会报java.lang.IllegalThreadStateException异常, 我们需要重新创建一个线程的实例对象;

  • 相关阅读:
    Laravel 底层原理:门面(Facades)
    用 PHP和Golang 来刷leetCode 之 无重复字符 最长子串
    今天发现一个好用的查询IP地址的工具,记录一波
    Ubuntu下安装SDL
    敏捷宣言
    python 读取xml文档
    每个程序员都必须遵守的编程原则
    作为Web开发人员,我为什么喜欢Google Chrome浏览器
    爬虫
    Python为什么要self
  • 原文地址:https://www.cnblogs.com/elnimo/p/13375886.html
Copyright © 2020-2023  润新知