大家好,今天小编关注到一个比较有意思的话题,就是关于java语言线程的问题,于是小编就整理了5个相关介绍Java语言线程的解答,让我们一起看看吧。
J***a启动时默认创建了多少线程?
每当使用j***a命令执行一个类时,实际上都会启动一个jvm,每一个JVM实际上就是在操作系统中启动一个进程,j***a本身具备了垃圾回收机制,所以每个j***a运行时至少会启动两个线程,一个main线程,另外一个是垃圾回收机制。
j***a线程太多会导致什么问题?
每个线程会占用1m(可以通过xss设置),线程太多就会oom;
线程太多会相互竞争cpu***,在获取和释放cpu***的过程都会线程切换,线程多切换就多,cpu忙于切换浪费时间,所以才会有reactor模型;
如果线程之间还存在各种***的锁争夺问题,那么线程越多,死锁的概率也越高。
j***a系统最大并发线程数大概是多少?
cup的多线程指的是真正意义上的可以同时运行的线程数,各线程并行运行。但是J***a中的并发线程指的是在一个进程中分时复用cpu的***,只是在宏观上看来是同时运行的,两者是有区别的。理论上j***a最大的并发线程没有数量上的限制,但是开启一个线程是很耗系统***的,如果并发量太大就会导致系统***不足而死机,所以我们一般会用线程池的技术来控制线程的数量,也可以提高并发的效率,如果感兴趣,你可以看看线程池相关的资料。
j***a中什么是线程不安全给出一个例子?
两个线程对一个变量进行操作,但是没有上锁,即没有进行同步操作,就像买车票的时候多个窗口一起卖,但是车票数没有减去。车票被重复卖出。就是不安全。还有,被多个线程操作的变量改为静态量加static,才安全
j***a线程锁为什么锁不住?
代码没发全。但是还是可以猜一下,我猜account是这个类的一个普通成员变量。你new了三个这个类的instance,所以在内存里有三个account被三个thread操作,即使你sync这个类的class,也不会起作用。两个基本解决方案:1,把account声明成static。 2,把这个类从继承thread变成实现runnable,在main方法里只new一个这个类的实例,并发的thred都用这一个实例。
还有很多J***a的独有的办法解决这个问题,例如: 用atomicinteger来做account,就不需要sync了
题主没有给出完整代码和运行结果,我分析这段代码是没有问题的,可以正确运行。
这段代码里,使用了S***eMoney类对象的锁,这个对象在运行时有且只有一个实例,这就保证了这段代码在执行时,同时只能有一个线程获得锁,其他的线程都要等待锁持有线程释放锁之后才能进入。所以题主需要补充一下,锁不住这个结论时怎么得出的。
我还原了这段代码,并给出运行结果如下:
运行代码,应该与题主的一致
运行结果表明,三个线程互斥执行同步代码块。
欢迎大家批评指正,如果觉得楼主答得不错,请点赞和关注^v^