Java多线程--售票代码
2015-07-21 14:32
344 查看
使用继承自Thread类的子类:
同步块:
/** * 继承Thread类的售票类 * * @author XINY * */ class TicketT extends Thread { // 票数,起始数量为100 private static int tick = 100; //随便写的一个对象,如没特殊要求可随便实例化一个对象,用于同步块中传入的值。 //为保证每个线程的锁一致,必需让obj为静态变量 static Object obj = new Object(); @Override public void run() { // TODO Auto-generated method stub while (tick > 0) { //obj对象无特殊要求,任何对象均可,但是必需保证每个线程传入的对象是同一个对象 synchronized (obj) { if (tick > 0) { try { // 休眠10毫秒 sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 出票 System.out.println(Thread.currentThread().getName() + "----" + tick--); } } } } } /** * 主类 * * @author XINY * */ public class TicketThread { public static void main(String[] args) { // 创建售票线程 TicketT t1 = new TicketT(); TicketT t2 = new TicketT(); TicketT t3 = new TicketT(); TicketT t4 = new TicketT(); // 开始线程 t1.start(); t2.start(); t3.start(); t4.start(); } }
同步方法:
/** * 继承Thread类的售票类 * * @author XINY * */ class TicketT extends Thread { // 票数,起始数量为100 private static int tick = 100; @Override public void run() { // TODO Auto-generated method stub while (tick > 0) { sale(); } } /** * 同步方法 * 为保证锁相同,将sale方法定义为static */ public static synchronized void sale(){ if (tick>0) { try { // 休眠10毫秒 sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 出票 System.out.println(Thread.currentThread().getName() + "----" + tick--); } } } /** * 主类 * * @author XINY * */ public class TicketThread { public static void main(String[] args) { // 创建售票线程 TicketT t1 = new TicketT(); TicketT t2 = new TicketT(); TicketT t3 = new TicketT(); TicketT t4 = new TicketT(); // 开始线程 t1.start(); t2.start(); t3.start(); t4.start(); } }
使用实现Runnable接口的子类:
同步块:
/** * 实现Runnable接口的类 * * @author XINY * */ class TicketR implements Runnable { // 初始票数100 private int tick = 100; Object obj=new Object(); @Override public void run() { // TODO Auto-generated method stub while (tick > 0) { //new Object() 是我随便写的,这里需要传入一个对象 synchronized (obj) { if (tick > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 出票 System.out.println(Thread.currentThread().getName() + "----" + tick--); } } } } } /** * 主类 * * @author XINY * */ public class TicketRunnable { public static void main(String[] args) { // TODO Auto-generated method stub TicketR t = new TicketR(); 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(); } }
同步方法:
/** * 实现Runnable接口的类 * * @author XINY * */ class TicketR implements Runnable { // 初始票数100 private int tick = 100; @Override public void run() { // TODO Auto-generated method stub while (tick > 0) { sale(); } } public synchronized void sale() { if (tick > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 出票 System.out.println(Thread.currentThread().getName() + "----" + tick--); } } } /** * 主类 * * @author XINY * */ public class TicketRunnable { public static void main(String[] args) { // TODO Auto-generated method stub TicketR t = new TicketR(); 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(); } }
相关文章推荐
- spring下载地址
- springmvc 表单提交时间字段_springMVC form提交404
- Android开发工具Eclipse自己常用的几个快捷键
- springmvc 返回json数据日期格式化方法
- JAVA中Double与double(Integer&int)之间的区别
- java StringUtils
- java代码的编译和执行过程
- LeetCode java实现ZigZagConversion
- java.lang.IllegalArgumentException:Document base ……does not exist or is not a readable directory错误的解决方案
- Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理 .
- JAVA多线程读写文件范例
- 基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
- javaweb通过SMS短信通API实现短信发送功能
- Java的内存机制
- java导出Excel
- 解决 eclipse 新建 maven 后无法显示 src/main/java 和 src/main/test
- 决策树算法---java
- 【j2ee spring】46、巴巴运动网——购物车
- LeetCode java实现Add Two Numbers
- Java Timer的使用(timer.schedule定时执行)