黑马程序员技术交流社区
标题:
线程安全问题
[打印本页]
作者:
mishisanyi
时间:
2015-6-9 14:44
标题:
线程安全问题
package exam;
class MyThread extends Thread
{
static int ticketnum = 1000;
MyThread(String name)
{
super(name);
}
public void run()
{
syso();
}
void syso()
{
while(ticketnum>0)
{
System.out.println(Thread.currentThread().getName()+":"+ticketnum--);
}
}
}
public class MyThreadMain
{
public static void main(String[] args)
{
Thread thread1 = new MyThread("thr1");
Thread thread2 = new MyThread("thr2");
Thread thread3 = new MyThread("thr3");
Thread thread4 = new MyThread("thr4");
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}
复制代码
这段代码我执行多次,并未出现线程问题,那么线程安全到底是怎样的一种情况,在什么时候发生
作者:
半月
时间:
2015-6-9 16:48
可能你没注意到吧
你把1000改小点10左右吧,会看到输出0
但是你while的条件是>0才输出的
就比如说thr1线程过了while的条件但是停住了,
换另一个线程执行,
执行完thr1又可以执行了,但是他已经过来while的判断所以直接输出了
作者:
world.net
时间:
2015-6-9 17:47
线程是否发生安全问题主要是看是否有多个线程存在,多个线程是否操作共享数据。你的这段代码是存在线程安全问题的,只不过线程安全是种随机发生的情况,看不到很正常,但是一旦发生后果也可能很严重,你可以在输出语句前加入让线程等待的语句,这样会更容易观察到一些数据错误的现象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2