JAVA多线程的三种实现方式

文章目录


一、线程与进程

进程:

  • 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间

线程:

  • 是进程中的一个执行路径,共享一个内存空间,线程之间可以*切换,并发执行. 一个进程最少有一个线程

  • 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程

二、Java线程的使用

Java有二种线程的实现方式,以及第三种不太常用的Callable
1、实现Runnable
2、继承Thread
3、带返回值的线程 Callable

1.继承Thread

代码如下(示例):

public class Demo {
    /**
     * @Description: 多线程
     */
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main方法里面的,主线程" + i);
        }
    }
}
package com.demo.thread;

public class MyThread extends Thread {
    /**
     * run方法就是线程要执行的任务方法
     */
    @Override
    public void run() {
        // 这里的代码 就是一条新的执行路径
        // 执行路径的触发方式,不是调用run方法,而是通过thread对象的start方法来启动任务
        for (int i = 0; i < 10; i++) {
            System.out.println("这里的代码 就是一条新的执行路径" + i);
        }
    }
}

2.实现Runnable

实现 Runnable 与 继承 Thread 相比的优势:

  • 通过创建任务, 然后给线程分配的 方式来实现的多线程,更适合多个线程同时执行相同任务的情况。
  • 可以避免单继承 所带来的 局限性。
  • 任务与线程本身是 分离的,提高了程序的 健壮性。
  • 线程池技术,接受 Runnable类型的任务,不接受 Thread类型的线程。

代码如下(示例):

public class Demo {       
    public static void main(String[] args) {
        // 实现 Runnable
        // 1. 创建一个Runnable对象
        MyRunnable myRunnable = new MyRunnable();
//        2. 创建一个Thread,并为其分配一个  myRunnable任务
        Thread thread = new Thread(myRunnable);
//        3. 执行这个线程
        thread.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("主线程" + i);
        }
    }
}
package com.demo.thread;

// 用于给线程进行执行的任务
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程的任务
        for (int i = 0; i < 10; i++) {
            System.out.println("这是另一条路径" + i);
        }
    }
}

3.带返回值的线程 Callable

//1. 编写类实现Callable接口 , 实现call方法 
	class XXX implements Callable<T> { 
		@Override public <T> call() throws Exception { 
			return T; 
		} 
    } 
//2. 创建FutureTask对象 , 并传入第一步编写的Callable类对象 
	FutureTask<Integer> future = new FutureTask<>(callable); 
//3. 通过Thread,启动线程 
	new Thread(future).start();

总结

以上就是今天要讲的内容,本文仅仅简单介绍了Java多线程三种的使用方式。

上一篇:Java Callable and Future学习


下一篇:流畅的python第七章函数装饰器和闭包学习记录