Java 线程基础 -- 创建新线程与线程的状态

多线程基础

进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程。

操作系统调度的最小任务单位其实不是进程,而是线程。

实现多任务的三种方法:

  • 多进程,每个进程只有一个线程

  • 多线程,一个进程有多个线程

  • 多进程 + 多线程

进程与线程的优缺点

和多线程相比,多进程的缺点在于:

  • 创建进程比创建线程开销大,尤其是在Windows系统上;

  • 进程间通信比线程间通信要慢,因为线程间通信就是读写同一个变量,速度很快。

多进程的优点在于:

  • 多进程稳定性比多线程高,因为在多进程的情况下,一个进程崩溃不会影响其他进程,而在多线程的情况下,任何一个线程崩溃会直接导致整个进程崩溃。

多线程

JAVA 语言内置了多线程支持:一个 Java 程序实际上就是一个 JVM 进程。

JVM 进程用一个主线程来执行 main() 方法,在 main() 方法内部,我们又可以启动多个线程。

因此,对于大多数 Java 程序来说,我们说多任务,实际上是说如何使用多线程实现多任务。

java 多线程编程的特点:

  • 多线程模型是 java 程序最基本的并发模型

  • 读写网络、数据库、web开发等都依赖 java 多线程模型

创建新线程

创建一个新线程需要实例化一个 Thread 实例,然后调用它的start() 方法:

public class Main {
    public static void main(String[] args){
        Thread thread = new Thread();
        thread.start(); //启动新线程
    }
}

但是这个线程启动后实际上什么也不做就立刻结束了。我们希望新线程能执行指定的代码。

具体方法如,从Thread派生一个自定义类,然后覆写run()方法:

public class Main {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start(); // 启动新线程
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("start new thread!");
    }
}

当使用t.start()启动新线程时,会在内部自动调用实例的run()方法。

线程的状态

在 Java 程序中,一个线程对象只能调用一次 start() 方法启动新线程,并在新线程中执行 run() 方法。一旦 run() 方法执行完毕,线程就结束了。

因此,Java线程的状态有以下几种:

  • New:新创建的线程,尚未执行;

  • Runnable:运行中的线程,正在执行run()方法的Java代码;

  • Blocked:运行中的线程,因为某些操作被阻塞而挂起;

  • Waiting:运行中的线程,因为某些操作在等待中;

  • Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;

  • Terminated:线程已终止,因为run()方法执行完毕。

通过对另一个线程对象调用 join() 方法可以等待其执行结束;

每天学习一点点,每天进步一点点。

猜你喜欢

转载自www.cnblogs.com/youcoding/p/13405880.html