浅谈线程的几种创建方式

这篇博客主要简单介绍线程的三种创建方式。适合刚开始学习线程的同学参考

第一种方式:继承Thread类,重写run方法

代码如下:

package main.thread_demo;
class CreatThreadDemo extends Thread{
    /**
     * run方法就是线程需要执行的任务或者执行的代码
     */
    @Override
    public void run() {
        for(int i=0;i<30;i++){
            System.out.println("run i:"+i);
        }
       
    } 
}
public class ThreadDemo {
    /**
     * 什么是进程:进程就是正在执行的应用程序,进程是线程的集合
     * 什么是线程:线程就是一条执行路径,一个独立的单元
     * 什么是多线程:就是为了提高程序效率
     * 创建线程有哪些方式?
     * 1.使用继承Thread类
     * 2.使用实现runlabe接口方式
     * 3.使用匿名内部类
     */
    
    
    public static void main(String[] args) {
        CreatThreadDemo t1=new CreatThreadDemo();
        //2.启动线程 不是调用run方法,而是调用start方法
        //3.开启多线程后,代码不会从上向下执行
        t1.start();
        for(int i=0;i<30;i++){
            System.out.println("main i:"+i);
        }
        
    }
}

第二种方式:实现Runnable接口,重写run方法

代码如下:

package main.thread_demo;
class CreatThreadDemo02 implements Runnable{
    /**
     * run方法就是线程需要执行的任务或者执行的代码
     */
    public void run() {
        for(int i=0;i<30;i++){
            System.out.println("子线程 i:"+i);
        }
       
    }
}

    /**
     * 什么是进程:进程就是正在执行的应用程序,进程是线程的集合
     * 什么是线程:线程就是一条执行路径,一个独立的单元
     * 什么是多线程:就是为了提高程序效率
     * 创建线程有哪些方式?
     * 1.使用继承Thread类
     * 2.使用实现runlabe接口方式
     * 3.使用匿名内部类
     */
public class ThreadDemo02 {

    public static void main(String[] args) {        
        CreatThreadDemo02 t1=new CreatThreadDemo02();
        //2.启动线程 不是调用run方法,而是调用start方法
        //3.开启多线程后,代码不会从上向下执行
       Thread thread=new Thread(t1);
       thread.start();
       for(int i=0;i<30;i++){
           System.out.println("主线程 i:"+i);
       }
        
    }
}

第三种方式:使用匿名内部类的方式

代码如下:

package main.thread_demo;

    /**
     * 什么是进程:进程就是正在执行的应用程序,进程是线程的集合
     * 什么是线程:线程就是一条执行路径,一个独立的单元
     * 什么是多线程:就是为了提高程序效率
     * 创建线程有哪些方式?
     * 1.使用继承Thread类
     * 2.使用实现runlabe接口方式
     * 3.使用匿名内部类
     */
public class ThreadDemo03 {
    public static void main(String[] args) {
        //什么是匿名内部类
      Thread t1= new Thread(new Runnable() {
        
        public void run() {
            // TODO Auto-generated method stub
            for(int i=0;i<30;i++){
                System.out.println("子线程 i:"+i);
            }
        }
    });
      t1.start();
       for(int i=0;i<30;i++){
           System.out.println("主线程 i:"+i);
       }
    }
}

注意事项:

	一、使用继承Thread类还是使用实现Runnable接口好?
	答:肯定是使用实现Runnable接口的方法好。原因是:1.java编程是面向接口编程。2.实现了接口可以继续继承,但继承了类就不能够在继承了。
	二、启动线程是使用调用start方法还是run方法?
	答:开启线程是调用start()方法,而不是调用run()方法。

#第一次写博客,肯定写的文笔比较笨重。比较紧张,写的东西也比较少,如果那里有错误欢迎大家指出。内容较为简单,仅供初学者参考。谢谢大家!

猜你喜欢

转载自blog.csdn.net/weixin_42880080/article/details/89708825