JAVA多线程安全问题
class Tickets implements Runnable
{
private int num=100;
public void run()
{
show();
}
public void show()
{
while(num>0)
{
try{
Thread.sleep(10);
}
catch(InterruptedException e)
{}
num--;
System.out.println("This is"+Thread.currentThread().getName()+"window,there are "+num+"tickets");
}
}
}
public class Safety_Problem_Of_Thread {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Tickets T=new Tickets();// TODO code application logic here
Thread t1=new Thread(T);
Thread t2=new Thread(T);
t1.start();
t2.start();
}
}
——————————————————————————————————
结果:
This isThread-1window,there are 99tickets
This isThread-0window,there are 99tickets
This isThread-0window,there are 98tickets
This isThread-1window,there are 98tickets
This isThread-1window,there are 96tickets
This isThread-0window,there are 96tickets
This isThread-0window,there are 95tickets
This isThread-1window,there are 95tickets
This isThread-1window,there are 94tickets
This isThread-0window,there are 94tickets
This isThread-1window,there are 93tickets
This isThread-0window,there are 92tickets
结果只列出了一部分。我知道这段代码存在安全问题,并没有设置同步。但是为什么结果中会输出两个99,98,96,95........这是什么原因呢,可否分析一下???谢谢
{
private int num=100;
public void run()
{
show();
}
public void show()
{
while(num>0)
{
try{
Thread.sleep(10);
}
catch(InterruptedException e)
{}
num--;
System.out.println("This is"+Thread.currentThread().getName()+"window,there are "+num+"tickets");
}
}
}
public class Safety_Problem_Of_Thread {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Tickets T=new Tickets();// TODO code application logic here
Thread t1=new Thread(T);
Thread t2=new Thread(T);
t1.start();
t2.start();
}
}
——————————————————————————————————
结果:
This isThread-1window,there are 99tickets
This isThread-0window,there are 99tickets
This isThread-0window,there are 98tickets
This isThread-1window,there are 98tickets
This isThread-1window,there are 96tickets
This isThread-0window,there are 96tickets
This isThread-0window,there are 95tickets
This isThread-1window,there are 95tickets
This isThread-1window,there are 94tickets
This isThread-0window,there are 94tickets
This isThread-1window,there are 93tickets
This isThread-0window,there are 92tickets
结果只列出了一部分。我知道这段代码存在安全问题,并没有设置同步。但是为什么结果中会输出两个99,98,96,95........这是什么原因呢,可否分析一下???谢谢
...全文
相关推荐
Java多线程安全问题和锁
"Java多线程安全问题与锁机制的探讨"在Java编程中,多线程环境常常带来数据一致性的问题,即线程安全问题。当多个线程同时操作同一数据,可能出现数据不一致的情况。为了解决这个问题,Java提供
Java多线程模拟售票程序和线程安全问题
Java多线程模拟售票程序和线程安全问题Java多线程模拟售票程序和线程安全问题是Java编程中一个经典的实践项目,旨在模拟售票系统中多个窗口同时售票的场景。
Java多线程的初识与简单的安全问题解决
"Java多线程的初识与简单的安全问题解决"在计算机科学中,多线程是并发执行的任务或程序片段,它允许程序利用多核处理器的潜力,提高系统的效率和响应性。Java作为一门支持多线程的编程语言,提供了
Java多线程 - (一) 最简单的线程安全问题
在Java编程中,多线程是并发处理任务的关键技术,特别是在服务器端开发和高并发场景下。本篇文章将深入探讨“最简单的线程安全问题”,并结合相关源码和工具来帮助理解。
基于同步机制解决Java多线程安全问题的应用 (1).zip
Java多线程编程是开发高性能、高并发应用的关键技术之一,但随之而来的是线程安全问题。本主题将深入探讨如何利用同步机制来确保在Java环境中多线程操作的正确性和一致性。


Java SE
