Java多线程--售票代码

来源:互联网 发布:小额借钱软件排名 编辑:程序博客网 时间:2024/05/17 07:37

使用继承自Thread类的子类:

同步块:

/** * 继承Thread类的售票类 *  * @author XINY * */class TicketT extends Thread {// 票数,起始数量为100private static int tick = 100;//随便写的一个对象,如没特殊要求可随便实例化一个对象,用于同步块中传入的值。//为保证每个线程的锁一致,必需让obj为静态变量static Object obj = new Object();@Overridepublic void run() {// TODO Auto-generated method stubwhile (tick > 0) {//obj对象无特殊要求,任何对象均可,但是必需保证每个线程传入的对象是同一个对象synchronized (obj) {if (tick > 0) {try {// 休眠10毫秒sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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 {// 票数,起始数量为100private static int tick = 100;@Overridepublic void run() {// TODO Auto-generated method stubwhile (tick > 0) {sale();}}/** * 同步方法 * 为保证锁相同,将sale方法定义为static */public static synchronized void sale(){if (tick>0) {try {// 休眠10毫秒sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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 {// 初始票数100private int tick = 100;Object obj=new Object();@Overridepublic void run() {// TODO Auto-generated method stubwhile (tick > 0) {//new Object() 是我随便写的,这里需要传入一个对象synchronized (obj) {if (tick > 0) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 出票System.out.println(Thread.currentThread().getName()+ "----" + tick--);}}}}}/** * 主类 *  * @author XINY * */public class TicketRunnable {public static void main(String[] args) {// TODO Auto-generated method stubTicketR 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 {// 初始票数100private int tick = 100;@Overridepublic void run() {// TODO Auto-generated method stubwhile (tick > 0) {sale();}}public synchronized void sale() {if (tick > 0) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 出票System.out.println(Thread.currentThread().getName() + "----"+ tick--);}}}/** * 主类 *  * @author XINY * */public class TicketRunnable {public static void main(String[] args) {// TODO Auto-generated method stubTicketR 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();}}



0 0