2020-09-13 Java多线程

2020-09-15  本文已影响0人  flynnny

一、并发与并行

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

线程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

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

上一篇下一篇

猜你喜欢

热点阅读