zoukankan      html  css  js  c++  java
  • Java中创建线程的两种方式

    创建线程方式一

    通过继承Thread类来创建并启动多线程

    Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。
    Java中通过继承Thread类来创建并启动多线程的步骤如下:

    1. 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体
    2. 创建Thread子类的实例,即创建了线程对象
    3. 调用线程对象的start()方法来启动该线程

    自定义线程类:

    /**
     * 自定义线程类
     */
    public class MyThread extends Thread {
        public MyThread(String name){
            super(name);
        }
    
        @Override
        public void run() {
            for(int i = 1; i <= 20; i++){
                System.out.println(getName() + " " + i);
            }
        }
    }
    

    测试类:

    /**
     * 创建线程方式一:
     *  1. 创建自定义类继承Thread类
     *  2. 重写run方法(run方法就是新的线程要执行的代码)
     *  3. 创建自定义类对象(线程对象)
     *  4. 调用start方法开启新的线程
     */
    public class Demo01 {
        public static void main(String[] args) {
            System.out.println("main线程开启");
            // 创建线程对象
            MyThread myThread = new MyThread("线程A");
            // 开启新的线程myThread
            myThread.start();
    
            // 这个循环在main线程中执行
            for (int i = 1; i <= 20; i++) {
                System.out.println("mian线程 " + i);
            }
        }
    }
    

    创建线程方式二

    通过实现Runnable类来创建并启动多线程

    采用java.lang.Runnable 也是非常常见的一种,我们只需要重写run方法即可
    步骤如下:

    1. 定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体
    2. 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正
      的线程对象
    3. 调用线程对象的start()方法来启动线程

    代码如下:

    public class MyRunnable implements Runnable {
    
        @Override
        public void run() {
            for (int i = 1; i <= 20; i++) {
                System.out.println(Thread.currentThread().getName() + " " + i);
            }
        }
    }
    
    /**
     * 创建线程方式二:
     *  1. 定义自定义类实现Runnable接口
     *  2. 重写run方法
     *  3. 创建自定义对象
     *  4. 创建Threed对象的时候,作为构造方法的参数进行传递
     *  5. 启动线程start方法
     */
    public class Demo02 {
        public static void main(String[] args) {
            // 创建线程任务对象
            MyRunnable myRunnable = new MyRunnable();
    
            // 创建线程对象
            Thread t1 = new Thread(myRunnable, "线程A");
            Thread t2 = new Thread(myRunnable, "线程B");
    
            // 开启线程
            t1.start();
            t2.start();
        }
    }
    
  • 相关阅读:
    Leetcode665.Non-decreasing Array非递减数组
    在MyEclipse中把多行代码用一快捷键注释掉
    struts2中addFieldError()方法
    [bzoj2588][Spoj10628]Count on a tree_主席树
    [bzoj3123][Sdoi2013]森林_主席树_启发式合并
    [bzoj1500][NOI2005]维修数列_非旋转Treap
    [bzoj1452][JSOI2009]Count_树状数组
    [bzoj1369][Baltic2003]Gem_树形dp_结论题
    [bzoj1195][HNOI2006]最短母串_动态规划_状压dp
    [bzoj2242][Sdoi2011]计算器_exgcd_BSGS
  • 原文地址:https://www.cnblogs.com/tian-ci/p/10543117.html
Copyright © 2011-2022 走看看