/* 多个线层同时操作一个数据 会导制数据超出 同步代码块 synchronized(对像) { 需要同步的代码 } */ class Do7 { public static void main(String[] args) { Piao p1=new Piao(); Thread t1=new Thread(p1); Thread t2=new Thread(p1); Thread t3=new Thread(p1); Thread t4=new Thread(p1); t1.start();…
解决线程问题: 方式一:同步代码块(synchronized) 语法: synchronized ("锁对象") {             //需要锁定的代码       }   解决线程安全问题原理: 当我们使用同步代码块时,就当与给此段语句上了一个锁,当一个线程A进去的时候,锁的状态会从开变成关,后面的线程是进不来的. 当进去的线程A执行完里面的代码时,锁的状态才会从关变成开,后面的线程才能进来. 同步代码块需要注意事项: 1.任何一个对象都可以作为一个锁对象 2.在同步代码块中…
package cn.sasa.demo1; import java.util.concurrent.ExecutionException; public class ThreadDemo { public static void main(String[] args) throws InterruptedException, ExecutionException { //创建Runnable接口实现类对象 Ticket t = new Ticket(); //创建3个Thread类对象,传递R…
public class Demo { public static synchronized void fun1(){ } public synchronized void fun2(){ } public static void main(String args[]) throws Exception{ synchronized(xxx) { } } } 三种同步类型 针对同步方法,同步静态方法,同步代码块,调用的时候到底是等,还是不等,到底是怎么一个等待机制.我想了很久,终于发现了他的原理所…
1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必须等到厨师做完之后放到菜品传递台上才行.所以,服务员会等待厨师. 3,厨师做完菜之后放到菜品传递台上,就相当于通知了服务员 wait和notify方法: 1,wait的作用是使当前执行代码的线程进行等待.wait()是Object类的方法,该方法用来将当前线程置入"预执行队列"中,并在wa…
java锁实现原理: http://blog.csdn.net/endlu/article/details/51249156 The synchronized keyword can be used to mark four different types of blocks: Instance methods Static methods Code blocks inside instance methods Code blocks inside static methods Instance…
一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ //同步代码块 } 其中obj就是同步监视器,它的含义是:线程开始执行同步代码块之前,必须先获得对同步监视器的锁定.任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定.虽然java程序允许使用任何对象作为同步监视器,但 是同步监视器的目的就是为了阻…
作业解析 利用白富美接口案例,土豪征婚使用匿名内部类对象实现. interface White{ public void white(); } interface Rich{ public void rich(); } interface Beauty{ public void beauty(); } interface WRB extends White, Rich, Beauty{ } class TuHao{ public void getMarry(WRB wrb){ wrb.white…
/** * 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * * 1.问题:卖票过程中,出现了重票.错票 -->出现了线程的安全问题 * 2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票. * 3.如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来.直到线程a操作完ticket时,其他 * 线程才可以开始操作ticket.这种情况即使线程a出现了阻塞,也不能被改变. * * * 4.在Java中,我们通…
解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在线程安全问题: 打印车票时出现重票,错票 1.原因:由于一个线程在操作共享数据过程中,未执行完毕的情况下, 另外的线程参与进来了,导致共享数据存在了安全问题 2.解决想法:让一个线程操作共享数据完毕后,其他进程才有机会参与共享数据的使用 3.java的解决方案: 线程的同步机制 方式一:同步代码块…