java线程与并发(二)

 

一般而言,线程通常有以下的这么几个状态:

创建状态:准备好了一个多线程操作对象

就绪状态:调用了start()方法,等待CPU调度

运行状态:执行run()方法,正在运行

阻塞状态:暂时停止执行,把资源给其他线程调用

终止状态:线程执行完毕,不再使用。

 

 

 

 

 

线程的常用操作

 

取得和设置线程的名称

对于一个线程,我们可以使用getName()和setName()

一般我们会在线程启动之前给线程起名,但是线程运行之后,我们也是可以给予线程名称的。

两个线程是可以重名的,如果我们没有给线程起名,那么java会自动分配一个名字给这个线程。

也可以通过构造方法给线程一个名字。

 

 

通过currentThread方法可以取得当前的线程对象

Thread. currentThread().getName();

 

各个方法中main主方法其实本身其实也是一个线程。

所以启动一个java程序至少启动了两个线程。

 

 

我们还可以通过isAlive()来看这个线程是否是存活的。

 

 

在线程操作中,我们还可以通过join()方法对线程进行强制运行,在一个线程强制运行前,其他的线程无法运行。必须要等待这个线程运行完毕之后,才能运行。

 

在一个线程的run()方法中使用Thread.sleep(time)可以让线程休眠。

这个方法需要捕获异常

 

 

同时,通过这个interrupt()方法  会中断线程执行。

threadName. Interrupt()

 

启动后台线程,使用setDaemon(boolean)方法

这样即使java被关闭了,这个程序依然会在运行。

 

在java中线程的执行是有优先级。

这里有三个等级

         MAX_PRIORITY   最高优先级

NORM_PRIORITY  中等优先级

MIN_PRIORITY    最低优先级

 

threadName. SetPriority()来设置线程的优先顺序

 

main方法对应的优先级是NORM_PRIORITY

 

这里还有一个方法可以让当前的线程操作让给其他线程(应该是降低它的优先级吧。。。)

在主方法中

Thread.currentThread().yield()

 

 

 

同步的死锁

 

在多线程开发中,同步和死锁是很重要的概念。

所谓是同步就是多个线程操作在一个时间内只能一个线程来使用。其他线程要等待这个线程完成之后才可能继续执行。

 

同步代码块  使用synchronized关键字来声明

同步代码块格式

         Synchronized(同步对象){

                   需要同步的代码;

}

在一个类中,可以使用this关键字来声明一个需要同步的代码块。

但是这样做,效率突然降低了很多。

 

同时我们也可以把一个方法声明为一个同步的方法。

Public synchronized void funName(){

         //code

}

posted @   whthomas  阅读(344)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示