Java 线程基础

26 阅读2分钟

Java 线程基础 关键词:Thread、Runnable、Callable、Future、wait、notify、notifyAll、join、sleep、yeild、线程状态、线程通信

线程简介 什么是进程 简言之,进程可视为一个正在运行的程序。它是系统运行程序的基本单位,因此进程是动态的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是操作系统进行资源分配的基本单位。

什么是线程 线程是操作系统进行调度的基本单位。线程也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。

进程和线程的区别 一个程序至少有一个进程,一个进程至少有一个线程。 线程比进程划分更细,所以执行开销更小,并发性更高。 进程是一个实体,拥有独立的资源;而同一个进程中的多个线程共享进程的资源。 创建线程 创建线程有三种方式:

继承 Thread 类 实现 Runnable 接口 实现 Callable 接口 Thread 通过继承 Thread 类创建线程的步骤:

定义 Thread 类的子类,并覆写该类的 run 方法。run 方法的方法体就代表了线程要完成的任务,因此把 run 方法称为执行体。 创建 Thread 子类的实例,即创建了线程对象。 调用线程对象的 start 方法来启动该线程。 public class ThreadDemo {

public static void main(String[] args) {
    // 实例化对象
    MyThread tA = new MyThread("Thread 线程-A");
    MyThread tB = new MyThread("Thread 线程-B");
    // 调用线程主体
    tA.start();
    tB.start();
}
​
static class MyThread extends Thread {
​
    private int ticket = 5;
​
    MyThread(String name) {
        super(name);
    }
​
    @Override
    public void run() {
        while (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + " 卖出了第 " + ticket + " 张票");
            ticket--;
        }
    }
​
}

Runnable 实现 Runnable 接口优于继承 Thread 类,因为:

Java 不支持多重继承,所有的类都只允许继承一个父类,但可以实现多个接口。如果继承了 Thread 类就无法继承其它类,这不利于扩展。 类可能只要求可执行就行,继承整个 Thread 类开销过大。 通过实现 Runnable 接口创建线程的步骤:

定义 Runnable 接口的实现类,并覆写该接口的 run 方法。该 run 方法的方法体同样是该线程的线程执行体。 创建 Runnable 实现类的实例,并以此实例作为 Thread 的 target 来创建 Thread 对象,该 Thread 对象才是真正的线程对象。 调用线程对象的 start 方法来启动该线程。 public class RunnableDemo {

public static void main(String[] args) {
    // 实例化对象
    Thread tA = new Thread(new MyThread(), "Runnable 线程-A");
    Thread tB = new Thread(new MyThread(), "Runnable 线程-B");
    // 调用线程主体
    tA.start();
    tB.start();
}
​
static class MyThread implements Runnable {
​
    private int ticket = 5;
​
    @Override
    public void run() {
        while (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + " 卖出了第 " + ticket + " 张票");
            ticket--;
        }
    }
​
}
}