Java线程浅记

Posted xpeanut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java线程浅记相关的知识,希望对你有一定的参考价值。

  首先,更正我之前的一个误区,之前一直将一个程序比作一个进程,那是不准确的;

  那么先来明确:程序进程线程的概念;

  程序:程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。(自己理解:无论是介绍C++还是Java等语言的书上多少会提到--程序 = 数据 + 算法,我以此作为引子,可以将算法看作指令(例如自增的 i++),这也是一种算法,这样比较好记住程序的概念);

 

  进程:进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程,如下图:

  技术图片

  里面的Google,IDEA等就是一个进程;

 

  线程:线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程,放图辅助:

  技术图片

    

------------------------------------------------------------------------------------------------------------------------

  所以,多进程是指操作系统能同时运行多个任务(程序),多线程是指在同一程序中有多个顺序流在执行。

  在java中实现多进程有3种方式,一种是继续Thread类,一种是实现Runable接口,还有一种是实现Callable接口,下面用代码来说明。

  一、继续Thread类

    大致的顺序为:集成Thread类,重写 run方法,开启线程;

 

public class ThreadTest01 extends Thread{

    @Override
    public void run() {
        // run方法线程
        for (int i = 0; i < 200; i++) {
            System.out.println("我是run方法线程" + i);
        }
    }

    // main线程,主线程
    public static void main(String[] args) {

        // 创建线程对象
        ThreadTest01 thread1 = new ThreadTest01();

        // start方法,开启线程
        thread1.start();

        for (int i = 0; i < 200; i++) {
            System.out.println("我是main方法主线程" + i);
        }
    }
}

  结果:

 技术图片

可以看见,线程之间,谁抢到资源,谁就run,无序;

待续......................................

 

以上是关于Java线程浅记的主要内容,如果未能解决你的问题,请参考以下文章

浅记线程池模型中多个线程对同个fd接收缓冲区读取争夺的方案

浅记对于select多路IO网络模型性能调优和BUG解决方案

浅记对于select多路IO网络模型性能调优和BUG解决方案

《暗时间》阅读浅记

Java进阶之光!2021必看-Java高级面试题总结

java开发的项目案例,大厂内部资料