美文网首页
进程和线程

进程和线程

作者: 大百白白 | 来源:发表于2020-02-13 19:52 被阅读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();
        }
    }
    

    相关文章

      网友评论

          本文标题:进程和线程

          本文链接:https://www.haomeiwen.com/subject/qcwlfhtx.html