A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© big_boss 初级黑马   /  2019-10-10 22:55  /  756 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程  安全问题创建线程的两种方式第一种方式是将类声明为 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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马