线程初学

#线程

日期:2020-12-30
学习:线程(详解)
发现:在Tread中发现下面这句话,关键字为volatile
“private volatile String name;”
解释:volatilev是一个特征修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了 ;
内容:

  1. 在继承父类和接口时,执行start()都只能执行一次,否则会报错,但是仍会执行一次。
    涉及多线程时,执行的优先级没有设定的情况下,执行的顺序没有固定的排列,每次执行都是不一样的结果。
  2. 对于多个线程同时处于执行状态时,为了区分线程,下面的方法是获取线程名:
public class Demo4 {
    /**
     * 功能:模拟售票
     *
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //定义售票窗口
        TicketWindow tw1 = new TicketWindow();

        //创建三个线程
        Thread t1 = new Thread(tw1);
        Thread t2 = new Thread(tw1);
        Thread t3 = new Thread(tw1);

        //启动三个线程
        t1.start();
        t2.start();
        t3.start();

    }
}

//窗口售票类
class TicketWindow implements Runnable {

    //一共有2000张票
    private int nums = 2000;

    @Override
    public void run() {
        // TODO Auto-generated method stub

        while (true) {

            //出票速度是一秒出一张
            try {
                Thread.sleep(500);
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

          synchronized (this){
              //先判断是否还有票
              if (nums > 0) {

                  //显示售票信息
                  System.out.println("在售出第 " + nums + " 张票" + "--"
                          + Thread.currentThread().getName());//得到当前线程名称

                  nums--;
              } else {
                  //售票结束
                  break;
              }
          }

        }
    }

}
  1. 由于多线程同时执行时会出现类似于多窗口抢同一张票,此时使用一个类似于锁的概念,对于一张票,只能有一张窗口购票结束,才能由别的线程继续抢票,不会出现抢同一张票:
synchronized (this){
                //执行的操作,例如抢票时,抢到就票数减一
}

【拓展】Java多线程——线程的优先级和生命周期
首先,线程的优先级并不是优先级越高就一定首先执行,只能改变被优先执行的概率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值