首页互联网java线程 Java线程同步的方法

java线程 Java线程同步的方法

编程之家2024-05-27115次浏览

一、Java是什么意思

你看到手机里面的所有软件包括手机,都是用程序写出来的,用java就可以写出来。java是一门编程语言,就相当于我们的汉语一样。编程语言是给计算机识别的,然而我们的语言是给人类识别的。群体不同,作用类似。java这一门编程语言进入中国30年左右的时间,因为其语法简单,开发速度过,效率高,因此越来越多的程序小白都选择它。其中有一个最最最主要的原因就是,因为java这几年一直都是编程排行榜的第一位。说白了,一个是简单好学,一个是用工单位多。

java线程 Java线程同步的方法

这几年随着互联网的快速发展,国家也大力支持互联网的发展。吸引了无数的学者来学习互联网java技术。这几年的人工智能,大数据分析,人脸识别无疑都有java的身影在里面支撑,java几乎深入到全中国的各个行业,未来将会有一个爆发式增长。预计到2020年的计算机行业的专业人数到达100万人,但是国内目前的缺口需要200万人,所以互联网仍然需要更多的人来加入。

java很显然是一门优秀的编程语言,吸引着无数从业者。

二、java的线程安全是什么谁能一言以蔽之

这个还真不能一句话概况,我博客写了一长篇关于线程安全的,我提炼了下面这段,看懂也基本够了:

单线程不会有安全问题,多线程编程才会有安全问题,根本在于是否存在criticalresource竞争资源,如果多线程不会访问竞争资源就不存在安全问题,否则则要处理,

什么是竞争资源呢,具体如下:

如果是各自访问其上下文context的资源,比如kafkaconsumerpartitionworker线程访问各自的storage则是互相不打扰的;

java线程 Java线程同步的方法

如果执行的某个方法内只用到了局部变量,由于局部变量位于各自thread的栈里,所以互不干扰;

如果执行的某个方法用到了传入的变量,也就是所谓的形式参数变量,则要看这个传入的变量是否是object,如果只是普通的参数则没关系,如果是对象,要看对象是否是同一个引用,不同引用没有关系;

如果执行的某个方法内用到了同一个引用,不管是传入的还是外部全局的变量,比如log4的logger,由于log4已经做好了线程安全写log,所以不用担心;

如果执行的某个方法内用到了同一个引用:

i)但是只是读没有写,读和读是没有冲突的,也没有关系;

ii)都有写,但是写不依赖于读,即线程不需要获取“最新”数据就可以直接写入覆盖,这种情况也没有关系;

java线程 Java线程同步的方法

iii)都有写,而且写依赖于读到最新数据,则需要处理;

三、如何监控Java线程池运行状态

如果想监控一个线程池的执行状态,线程池执行类ThreadPoolExecutor给出了相关的API,能实时获取线程池的以下信息:

当前活动线程数

正在排队中的线程数

已经执行完成的线程数

总线程数

……

总线程数=排队线程数+活动线程数+执行完成的线程数

1.代码示例

创建ThreadPoolExecutor实例:

通过ThreadPoolExecutor的API来获取线程运行信息:

2.代码运行分析

线程池提交了100000个任务,但同时只有50个线程在工作,我们每间隔3秒来获取当前线程池的运行状态。

2.1第一次程序输出

当前排队线程数:99950

当前活动线程数:50

执行完成线程数:0

总线程数(排队线程数+活动线程数+执行完成线程数):100000

2.2第二次程序输出

当前排队线程数:99800

当前活动线程数:50

执行完成线程数:150

总线程数(排队线程数+活动线程数+执行完成线程数):100000

2.3最后输出

当前排队线程数:0

当前活动线程数:0

执行完成线程数:100000

总线程数(排队线程数+活动线程数+执行完成线程数):100000

因此,了解清楚这些API的使用方法后,我们想监控线程池的状态就非常方便了。

欢迎关注笔者,持续分享有价值的优质架构文章。

购物平台有哪些活动?各平台集卡活动文件夹加密码(如何给文件夹加密码)