黑马程序员技术交流社区
标题:
多线程
[打印本页]
作者:
big_boss
时间:
2019-10-10 22:55
标题:
多线程
多线程 安全问题
创建线程的两种方式
第一种方式是将类声明为 Thread 的子类
定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体。
创建Thread子类的实例,即创建了线程对象。
调用线程对象的start()方法来启动该线程。
第二种方式是声明一个类实现Runnable 接口
定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,Thread对象才是真正的线程对象。
调用线程对象的start()方法来启动线程。
public class Chuangkou implements Runnable {
private int tickets = 100;
private Object obj=new Object();//定义一把锁 @Override public void run() { synchronized (obj) {//使用同一把锁,保证以下代码块的线程安全 while (true) { if (tickets > 0) { System.out.println(Thread.currentThread().getName() + "正在卖出第 : " + tickets + "张票"); tickets--; try { Thread.sleep(10);//出票10ms } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } }}
public static synchronized
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2