美文网首页
2020-09-13 Java多线程

2020-09-13 Java多线程

作者: flynnny | 来源:发表于2020-09-15 00:22 被阅读0次

    一、并发与并行

    并发:两个或多个事件在同一时间段内发生;
    并行:两个或多个事件在同一时刻发生。

    线程1.png

    二、线程与进程

    进程:内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序既是一个进程从创建、运行到消亡的过程。
    线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

    线程调度:

    分时调度:所有线程轮流使用CPU,平均分配每个线程占用CPU的时间;
    抢占式调度:优先让优先级高的线程使用CPU,优先级相同的会随机选择一个(线程随机性),Java使用的是抢占式调度。

    主线程:执行主(main)方法的线程

    单线程程序:程序中只有一个线程,从main方法开始从上到下依次执行。
    1.jvm执行main方法,main方法进入栈内存;
    2.Jvm找操作系统开辟一条main方法通向CPU的执行路径,CPU就可以通过之歌路径执行main方法;
    3.这个路径叫为主(main)线程。


    线程2.png

    三、创建线程类

    Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。
    创建并启动多线程的步骤如下:
    (方法一)
    1.定义Thread类的子类,并重写该类的run()方法(线程的执行体)。
    2.创建Thread子类的实例,即线程对象;
    3.调用线程对象的start()方法启动线程。
    (方法二)
    1.定义Runnable接口的实现类,并重写该接口的run()方法。
    2.创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread线程对象。
    3.调用线程对象的start()方法启动线程。

    Thread 和Runnable的区别:如果继承Thread,不适合资源共享,但是Runnable接口很容易实现资源共享。可以继承其他类,增强了扩展性。降低了耦合性。

    匿名内部类方式创建线程
    格式:

    new Thread(new Runnable(){
            @override
            public void run(){
                    //执行内容...
            }
    }).start();
    

    注意start()方法和run()方法区别:run()方法只是加入原来的栈,还是原来的线程;start()方法每次都开辟一个新的栈并调用run()方法,实现多线程。

    附:线程运行内存图如下:


    线程3.png

    为下一篇线程安全做准备!

    相关文章

      网友评论

          本文标题:2020-09-13 Java多线程

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