使用同步方法解决

格式:

修饰符synchronized 返回值方法(){

}


package com.itheima_05;
/*
* 同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,则整个方法全部锁住,其他线程则无法访问
*
* synchronized
* 注意:
* 非静态同步方法的锁对象是this
* 静态的同步方法的锁对象是当前类的字节码对象
*/
public class TicketThread implements Runnable {
static int tickets = 100;// 火车票数量
Object obj = new Object();

@Override
public void run() {
// 出售火车票
while (true) {
/*synchronized (obj) {
method();
}*/

//method();
method2();

}
}

private synchronized void method() {
if (tickets > 0) {

try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(Thread.currentThread().getName() + ":" + tickets--);
}
}


private static synchronized void method2() {

if (tickets > 0) {

try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(Thread.currentThread().getName() + ":" + tickets--);
}
}



}

packagecom.itheima_05;

publicclassTicktetTest {

publicstaticvoidmain(String[] args) {

//创建线程对象

TicketThread tt = newTicketThread();

Thread t = newThread(tt);

t.setName("窗口1");

Thread t2 = newThread(tt);

t2.setName("窗口2");

Thread t3 = newThread(tt);

t3.setName("窗口3");

//启动线程对象

t.start();

t2.start();

t3.start();

}

}




更多相关文章

  1. 本地方法中printf如何传给java--java系统级命名管道
  2. 为泛型类的泛型方法的属性赋值 - Java
  3. java线程池使用场景和使用方法较详细文摘
  4. java的学习方法(转自黑马程序员)
  5. 是否有缩放因子方法用于Android的多分辨率支持
  6. Java提高篇——equals()方法和“==”运算符

随机推荐

  1. android平台解析epub--epublib
  2. Professional Android 2 Development - 2
  3. Android2.1系统在TOP6410上完美运行
  4. android WebView全屏观看视频 全屏观看直
  5. Android-经常涉及到的权限
  6. [android盈利模式探索]心得分享--Android
  7. Android的IPC机制Binder的详解(转发)
  8. Android(安卓)小項目之---Toast對象詳細
  9. FFmpeg的Android平台移植—编译篇
  10. activity设置背景色为透明