首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

多线程-运行出现了安全有关问题

2012-08-25 
多线程--运行出现了安全问题/**多线程--运行出现了安全问题?通过分析 多线程--简单的卖票程序?发现 打印出

多线程--运行出现了安全问题

/**

多线程--运行出现了安全问题

?通过分析 多线程--简单的卖票程序?

发现 打印出0,-1,-2等错票


?问题的原因:

当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,

还没有执行完,另一个线程参与进来执行。导致共享数据的错误。


解决办法:

对多条操作共享数据的语句,只能让一个线程都执行完。在执行的过程中,其他线程

不可以参与执行。


Java对于多线程的安全问题提供了专业的解决方式


就是同步代码块


synchronized(对象){

需要被同步的代码

}


对象如同锁。持有锁的线程可以在同步中执行。

没有持有锁的线程即使获取cpu的执行权 也进不去 因为没有获取锁


同步的前提:

1.必须要有两个或者两个以上的线程

2.必须是多个线程使用同一个锁


必须保证同步中只能有一个线程在运行


好处:解决的多线程的安全问题

弊端:多个线程都需要判断锁,较为消耗资源

*/


class Ticket implements Runnable

{

private int ticketNum = 100;

Object obj = new Object();


public void run(){

while(true){

synchronized(obj){

if(ticketNum>0){

try{

Thread.sleep(10);

}catch(Exception e){

}

System.out.println(Thread.currentThread().getName()+":sale..." + ticketNum--);

}

}

}

}


}


class ?TicketDemo2

{

public static void main(String[] args)?

{


Ticket t = new Ticket();


Thread t1 = new Thread(t);//创建了一个线程

Thread t2 = new Thread(t);//创建了一个线程

Thread t3 = new Thread(t);//创建了一个线程

Thread t4 = new Thread(t);//创建了一个线程

t1.start();

t2.start();

t3.start();

t4.start();


}

}


热点排行