进程和线程

2020-02-13  本文已影响0人  大百白白

进程和线程的区别与联系:
1、进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程一般由程序,数据集合和进程控制块三部分组成。进程具有的特征:动态性、并发性、独立性、结构性。
2、线程是程序执行的最小单位。线程上下文切换比进程上下文切换要快得多。
3、进程使用独立的数据空间,而线程共享进程的数据空间。一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。

创建线程有几种不同的方式:
继承Thread类、实现Runnable接口、使用Callable和FutureTask、使用线程池(如用Executor框架)、Spring实现多线程(底层是线程池)、定时器Timer(底层封装了一个TimerThread对象)。
实现Runnable接口这种方式更受欢迎,因为不需要继承Thread类,已经继承或者需要继承别的接口的时候,只能实现接口,Java是不支持多继承的。同时,线程池也是非常高效的,很容易实现和使用。

线程在执行过程中,可以处于下面几种状态:
就绪(Runnable):线程准备运行,不一定立马就能开始执行。
运行中(Running):进程正在执行线程的代码。
等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
睡眠中(Sleeping):线程被强制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
死亡(Dead):线程完成了执行。

start()方法和run()方法的区别:
当程序调用start()方法时,会创建一个新线程,然后执行run()方法。但是如果我们直接调用run()方法,则不会创建新的线程,run()方法将作为当前调用线程本身的常规方法调用执行,并且不会发生多线程。

一个线程代码例子:

class RunnableDemo implements Runnable {
    private Thread t;
    private String threadName;

    RunnableDemo(String name) {
        // 初始化操作
        threadName = name;
        System.out.println("初始化线程名称: " + threadName);
    }

    public void run() {
        // 运行时需要执行的操作
        System.out.println("线程正在执行: " + threadName);
        System.out.println("线程 " + threadName + " 执行结束.");
    }

    public void start() {
        // 创建线程
        System.out.println("开始创建线程: " + threadName);
        if (t == null) {
            t = new Thread(this, threadName);
            t.start();
        }
    }
}

public class test {
    public static void main(String args[]) {
        RunnableDemo R1 = new RunnableDemo("Thread-1");
        R1.start();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读