不太理解线程不安全产生的原因
public class ThreadDemo2
{
public static void main(String[] args)
{
TicketWin win=new TicketWin();
Thread win1=new Thread(win);
Thread win2=new Thread(win);
Thread win3=new Thread(win);
Thread win4=new Thread(win);
win1.start();
win2.start();
win3.start();
win4.start();
//自己测试发现,用一个继承了Thread类的子类作为参数,传递给
//new Thread()方法时,创建的线程还是原来那个,线程没有增加
//就像是把一个线程重复打开四次。
}
}
class TicketWin implements Runnable
{
private int ticketNumber=10;
public void run()
{
while(ticketNumber>0)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"--"+ticketNumber);
ticketNumber--;
}
}
}
上面的代码运行后,其中的一次结果是这样的:

我的问题是:
这四个线程是怎么抢占CPU的?最后才产生了这样一个结果(都是2)?
相关推荐
【并发】为什么HashMap是线程不安全的?
目录 1.什么是线程安全性(what) 2.如何分辨一个类是否线程安全?(HOW) 3.为什么hashmap不安全 why 3.1 插入HashMap.put 3.1.1 HashMap 在扩容的时候 3.2 HashMap 在删除数据的时候 0.背景 经常会看到说HashMap是线程不安全的,ConcurrentHashMap是线程安全的等等说法,不禁有个疑问,什么是线程安全?什么样的类是线程安全的? 1.什么是线程安全性(what) 线程安全定义,最核心是正确性, 正确性:多个线程访问某个类,不管怎么调度这些线程,其代码中不需要额外的同步或协同(synchronized),这个类依然有正确
simpleDateFormat是线程不安全的
NULL 博文链接:https://flynndang.iteye.com/blog/711878
Java线程:线程安全与不安全
作为一个Java web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了。记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT、Socket、多线程、I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远了。上次在百度开发者大会上看到一个提示语,自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果不使用或者不常常回顾,那么还不是自己的知识。大学零零散散搞了不到四年的Java,我相信很多人都跟我一样,JavaSE基础没打牢,急忙忙、兴冲冲的搞JavaEE了,然后学习一下前台开发(html、css
StringBuilder为什么线程不安全深入讲解
主要给大家介绍了关于StringBuilder为什么线程不安全的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用StringBuilder线程具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
详解java中产生死锁的原因及如何避免
主要介绍了java中产生死锁的原因及如何避免,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


Java SE
