![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 74
Sunlightʊə
努力奋斗!
展开
-
非线程安全问题
也就是说,在这三个步骤中,如果有多个线程同时访问,那么很大概率会出现“非线程安全”问题。如果一个线程要执行run方法,首先要判断run方法是否上锁,如果上锁,说明有其他线程在调用run方法,这个线程就要进行等待,等待其他线程将run方法调用结束后,才能继续调用run方法。当一个线程想要执行同步方法里面的代码,它会首先尝试去拿到这把锁,如果能拿到,那么该线程就会执行同步方法中的代码。也就是说,一共创建了3个线程,每个线程有自己的count变量,在执行过程中自己减少自己的count变量的值。原创 2023-07-13 22:42:28 · 304 阅读 · 1 评论 -
如何使用多线程
一个进程正在运行时,至少会有一个线程在运行。执行结果:这里输出的main其实是一个名字为mian的线程在执行main()方法中的代码,也就是说,当前线程的名字mian与mian()方法无关。该线程由JVM创建。运行结果:这里B类中的bMethod方法打印出当前执行线程的名称依旧是main,进一步说明当前线程名称为main与jmain方法无关。Java中实现多线程编程的方式主要有两种:一种是继承Thread类,另一种是实现Runnable接口。原创 2023-07-09 12:36:09 · 145 阅读 · 0 评论 -
线程随机性
如果调用的方法不是thread.start()而是thread.run(),这里就不是异步执行了,而是同步执行。时间片就是CPU分配给各个程序的时间,每个线程被分配一个时间片,在当前的时间片内执行线程中对应的任务。注意,当CPU在不同线程上进行切换时是需要耗时的,因此创建的线程越多,运行效率越慢。多线程随机输出的原因是CPU将时间片分给不同的线程,线程获得时间片后执行相应任务,所以这些线程在交替执行输出,导致上述的输出结果乱序。上述结果说明执行start()方法的顺序不代表run()方法的顺序。原创 2023-07-09 11:52:07 · 170 阅读 · 0 评论 -
使用常见的三个命令分析线程的信息
查看线程等待状态与信息可以采用3种常见命令。jps + jstack.exe jvisualvm.exe jmc.exe原创 2023-07-09 11:16:38 · 801 阅读 · 0 评论