您的位置:首页 > 编程语言 > Java开发

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: