多线程基础

发布时间:2024年01月22日

进程:当一个应用程序进入内存运行,就是一个进程。

线程:线程是进程里的执行单元。进程内有多个线程的程序就是多线程程序。

常用Thread类的方法:

getName()

start()

run()

sleep() 抛出了异常。

Thread.currentThread()

Thread.currentThread().getName() //在那个线程中就获取当前线程的名称。

Thread线程表示

run()可以当做普通方法直接调用,这样不是多线程了。Thread通过start()方法开启新的线程。

image-20240122104022066

多线程执行流程

img

多线程程序的内存图解: 堆内存共享,栈内存私有

img

线程优先级设置:

优先级范围:1-10(优先级从低到高),默认是5。

获取优先级:线程对象.getPriority();

设置优先级:线程对象.setPriority(9);

注意:优先级高的线程不一定每次都能抢的过优先级低的线程,只是抢到执行权的概率更高。

**守护线程:**执行一些辅助性操作

特点:当所有的非守护线程执行完毕,守护线程就终止,无论守护线程是否执行完毕。

线程对象.setDaemon(true);

线程同步:

当多个线程对共享的变量进行写操作时会出现问题。

买票案例的分析过程:(要明白为什么会存在三个线程卖出同一张票和卖出第-1张票的情况)

image-20240122145127555

三种方式:

同步代码块 :synchronized(同步锁){ } 任意对象可以做为同步锁,通常使用this

				 弊端:当线程很多时,每个线程都会去同步判断锁,耗费资源,降低效						率。

同步方法 : 将synchronized加在方法上,普通方法以this为同步锁,静态方法以字 节码文件(类名.class)为同步锁。

lock接口 : Lock lock = new ReentrantLock();

? lock.lock();

? 代码;

? lock.unlock();

线程同步的原理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线程的六种状态:

image-20240122151501090

判断问题

被重写的方法没有抛出异常时,子类重写这个方法时不可抛出编译期异常,可以抛出运行期异常。

image-20240122101826050

异常

被重写的方法没有抛出异常时,子类重写这个方法时不可抛出编译期异常,可以抛出运行期异常。

[外链图片转存中…(img-slNZk2WI-1705920958160)]

异常

image-20240122160109601

文章来源:https://blog.csdn.net/m0_73450879/article/details/135755873
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。