java多线程------synchronized方法,块
2017-03-10 13:36
423 查看
package test.threaddemo; import com.sun.javafx.collections.annotations.ReturnsUnmodifiableCollection; import javax.xml.bind.PrintConversionEvent; import java.util.concurrent.locks.Lock; public class ThreadDemo3 { public static void main(String[] args) { Ticket ticket = new Ticket(); MaiPiao1 t1 = new MaiPiao1("A", ticket); MaiPiao1 t2 = new MaiPiao1("B", ticket); MaiPiao1 t3 = new MaiPiao1("C", ticket); t1.start(); t2.start(); t3.start(); } } class MaiPiao1 extends Thread { String name; Ticket ticket; public MaiPiao1(String name, Ticket ticket) { this.name = name; this.ticket = ticket; } public void run() { while (true) { int no = ticket.getTicket(); if (no != 0) { System.out.println(name + ":" + ticket.getTicket()); } else { return; } } } } /** * 买票synchronized方法 */ class Ticket { private int ticket = 100; public synchronized int getTicket() { if (ticket <= 0) { return 0; } int tmp = ticket; ticket = ticket-1; return tmp; } }
synchronized块
package test.threaddemo; import javax.xml.bind.PrintConversionEvent; import java.util.concurrent.locks.Lock; public class ThreadDemo2 { public static void main(String[] args) { MaiPiao t1 = new MaiPiao("A"); MaiPiao t2 = new MaiPiao("B"); MaiPiao t3 = new MaiPiao("C"); t1.start(); t2.start(); t3.start(); } } /** * 买票synchronized块 */ class MaiPiao extends Thread { private String name; public static int ticket = 10; public MaiPiao(String name) { this.name = name; } private static Object lock = new Object(); public void run() { while (true) { synchronized (lock) { if(ticket <=0){ return; } int tmp = ticket; try { Thread.sleep(tmp); } catch (InterruptedException e) { e.printStackTrace(); } ticket = tmp - 1; System.out.println(name + ":" + tmp); } yield();//线程让步 } } }
相关文章推荐
- 初学Java多线程:使用Synchronized关键字同步类方法
- (转)初学Java多线程:使用Synchronized关键字同步类方法
- Java多线程之Synchronized应用在static和非static方法上的区别
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 初学Java多线程:使用Synchronized关键字同步类方法
- Java多线程程序中synchronized修饰方法的使用实例
- 四、java多线程核心技术——synchronized同步方法与synchronized同步快
- Java 多线程:synchronized 关键字 3ff0 用法(修饰类,方法,静态方法,代码块)
- java多线程----synchronized方法锁能否锁住对象呢?
- 九、初学Java多线程:使用Synchronized关键字同步类方法
- JAVA多线程(五)用lock、synchronized、阻塞队列三种方法实现生产者消费者模式
- java 多线程 Synchronized方法和方法块 synchronized(this)和synchronized(object)的理解
- java 多线程8 : synchronized锁机制 之 方法锁
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)
- java多线程(四)synchronized关键字修饰方法
- java多线程(四)synchronized关键字修饰方法
- Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
- java 多线程10:synchronized锁机制 之 锁定类静态方法 和锁定类.Class 和 数据String的常量池特性
- 【转载】Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入