java多线程-多线程的安全问题-多线程同步代码块-锁Synchronized
2014-07-30 21:21
316 查看
通过分析,发现,打印出了0,-1,-2等错票
多线程的运行出现了安全问题
问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致了共享数据的错误。
解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。
java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。
Synchronized(对象)
{
需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
火车上卫生间---经典。
同步的前提:
1,必须要有两个或者两个以上的线程
2,必须是多个线程使用同一个锁
必须保证同步中只能有一个线程在运行
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源
多线程的运行出现了安全问题
问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致了共享数据的错误。
解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。
java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。
Synchronized(对象)
{
需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
火车上卫生间---经典。
同步的前提:
1,必须要有两个或者两个以上的线程
2,必须是多个线程使用同一个锁
必须保证同步中只能有一个线程在运行
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源
class Ticket implements Runnable// extends Thread { private static int tick = 100; Object obj = new Object(); public void run() { while(true) { synchronized(obj) { if(tick>0) { try{Thread.sleep(2);}catch(Exception e){}; System.out.println(Thread.currentThread().getName()+"...sale:"+ tick--); } } } } } 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(); } }
相关文章推荐
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- java多线程-多线程同步代码块-银行存款实例-锁synchronized
- java学习日记(6)____多线程的安全问题与死锁的产生
- 记录Java多线程的同步问题---synchronized关键字的使用
- 【黑马程序员】java多线程同步不安全问题,锁和死锁等总结
- Java——多线程安全问题
- 静态变量、实例变量、局部变量在多线程环境下的线程安全问题 java 多线程
- java 代码块,static,synchronized,内部类等问题
- java多线程学习一线程安全之内存、synchronized、volatile
- 【黑马程序员】Java基础05:多线程与其安全问题
- 黑马程序员——java第十一、十二天:多线程(创建线程1-2、多线程同步代码、实现Runnable接口、安全死锁)
- 黑马程序员--Java 多线程的安全问题
- java多线程及安全问题
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- java多线程安全问题的解决
- Java中级----多线程同步基本思想,java多线程设计wait、notify、notifyall、synchronized的使用机制(转)
- Java多线程技术初识——4. 多线程安全问题的解决
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁
- 多线程解决安全问题的方法(Synchronized)