13.8 线程的安全问题和解决方法
2016-11-17 16:57
155 查看
package cn.chen.threadsecurity; /* 出现线程安全问题的原因: 1.存在两个或两个以上的线程对象,而且线程之间共享一个资源。 2.有多个语句操作了共享资源。 java线程同步机制: 方式一:同步代码块: 同步代码块的格式: synchronize(锁对象){ 需要被同步的代码。 } 注意事项: 1.任意一个对象都可以做为一个锁对象,例如 static Object o = new Object(); 2.在同步代码块中调用了sleep方法,在此过程中并不会释放锁 3.只有真正存在线程安全问题的时候才使用同步代码块,否则会降低效率。 4.多线程操作 的锁对象 必须是唯一共享的 ,否则无效。 方式二:同步函数: 后面介绍 */ class SaleTicket extends Thread{ //设置num为静态的 //票数,非静态的成员变量,非静态的成员变量数据是在每个对象中都会维护一份数据。 static int num = 10 ; static Object o = new Object();//锁对象 public SaleTicket(String name){ super(name); } @Override public void run() { // TODO Auto-generated method stub super.run(); while(true){ synchronized (o) { if(num > 0){ System.out.println(Thread.currentThread().getName()+" 剩余 " +num+"号票"); num--; try{ sleep(100); }catch (InterruptedException e){ e.printStackTrace(); } }else{ System.out.println("售罄"); break; } } } } } public class Demo { public static void main(String[] args) { // TODO Auto-generated method stub //创建三个线程,模拟窗口 SaleTicket s1 = new SaleTicket("窗口1"); SaleTicket s2 = new SaleTicket("窗口2"); SaleTicket s3 = new SaleTicket("窗口3"); s1.start(); s2.start(); s3.start(); } }
相关文章推荐
- Java线程安全问题及线程安全解决方法
- 解决SimpleDateFormat的线程不安全问题的方法:ThreadLocal
- 线程安全问题出现的原因和解决方法
- java解决线程不安全问题的方法
- Java之——SimpleDateFormat 线程不安全问题及解决方法
- 程序中和有js函数的网页交互,线程中调用 get_Script 就会错误的解决方法,由于COM的线程安全问题
- Java SimpleDateFormat 线程不安全问题及解决方法
- java 线程遇到的问题及解决方法 JNI调用
- ACE的ACE_Logging_Strategy类中的一个多线程安全问题的发现及解决过程
- 四种方法解决存储过程中的数据安全问题
- ACE的ACE_Logging_Strategy类中的一个多线程安全问题的发现及解决过程
- Windows操作系统常见安全问题解决方法
- CFileDialog改变文件路径导致的一系列问题(如无法安全删除u盘、访问相对路径失败)的解决方法
- Tomcat中应用调用Libvirt库进行控制时可能导致线程卡死问题的解决方法
- 浅谈互联网安全的问题以及解决方法
- flex关于跨域访问会引起安全沙箱问题,下面是在网上找到的解决安全沙箱问题的方法
- OpenID与传统Email用户身份认证模式整合时的安全问题和解决方法
- asp+access网站安全问题解决方法大全(csdn资料整理)
- outlook禁止访问下列带有潜在安全问题的附件的解决方法
- 关于hibernate的session的线程不安全的解决方法