java多线程安全问题的解决
2014-01-23 22:27
357 查看
通过售票的例子
通过分析:发现,打印出0,-1,-2等错票。
多线程的运行出现了安全问题。
问题的原因:
当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分
还没执行完。另一个线程参与进来执行。导致共享数据的错误。
解决办法:
对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。
其他线程不可以参与执行
java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。
synchronized(对象)
{
需要被同步的代码
}
通过分析:发现,打印出0,-1,-2等错票。
多线程的运行出现了安全问题。
问题的原因:
当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分
还没执行完。另一个线程参与进来执行。导致共享数据的错误。
解决办法:
对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。
其他线程不可以参与执行
java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。
synchronized(对象)
{
需要被同步的代码
}
/* 通过分析:发现,打印出0,-1,-2等错票。 多线程的运行出现了安全问题。 问题的原因: 当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分 还没执行完。另一个线程参与进来执行。导致共享数据的错误。 解决办法: 对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。 其他线程不可以参与执行 java对于多线程的安全问题提供了专业的解决方式。 就是同步代码块。 synchronized(对象) { 需要被同步的代码 } */ class Tickets implements Runnable { private int tick = 100; Object obj = new Object(); public void run() { while(true) { synchronized(obj) { if(tick >0) { try { Thread.sleep(10); } catch (Exception e) { } System.out.println("tick:"+tick--); } } } } } class Test_11_08 { public static void main(String[] args) { System.out.println("Hello Wolrd"); Tickets t = new Tickets(); 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(); } }
相关文章推荐
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- Java多线程技术初识——4. 多线程安全问题的解决
- java中多线程的安全问题以及解决办法
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- java多线程的等待唤醒机制及如何解决同步过程中的安全问题
- Java基础 多线程 解决安全问题 等待唤醒机制 Lock Condition interrupt join setPriority yield
- Java多线程技术初识——4. 多线程安全问题的解决
- Java学习笔记45(多线程二:安全问题以及解决原理)
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁
- Java 学习笔记16:用ThreadLocal解决多线程安全问题
- java 多线程(线程间通信-解决安全问题)
- 4000 java中多线程的安全问题以及解决办法(2)
- java中多线程安全问题产生&解决方案——同步代码块
- Java多线程中线程安全与锁问题
- 黑马程序员--JAVA基础复习之多线程(二)线程安全与解决方法
- Java多线程:解决高并发环境下数据插入重复问题
- java多线程解决生产者消费者问题
- Java多线程探究-多线程安全问题
- 黑马程序员——JAVA基础之多线程的安全问题
- (47)Java学习笔记——多线程 / 线程的安全问题