线程的学习

来源:互联网 发布:河南卫视网络直播 编辑:程序博客网 时间:2024/05/16 02:46

**

概念

**

  多线程:一个应用程序有多条执行路径  进程:正在执行的应用程序  线程:进程的执行单元,执行路径  单线程:一个应用程序只有一条执行路径  多线程:一个应用程序有多条执行路径  多进程的意义?       提高CPU的使用率  多线程的意义?       提高应用程序的使用率

线程的生命周期

这里写图片描述

线程同步(火车票售卖问题)

  1. // 定义100张票 private static int tickets = 100; // 定义同一把锁 private
    Object obj = new Object();
  2. 核心代码块synchronized (SellTicket.class) {//
    if (tickets > 0) {
    try {
    Thread.sleep(100);//
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName() + “正在出售第” + (tickets–) + “张票”);
    }
    同步代码块的锁是谁呢?
    任意对象

    同步方法的锁是谁呢?
    this(关键字synchronized一般放在权限修饰符后面)

    静态方法及锁对象问题
    静态方法的锁对象是谁呢?
    类的字节码文件对象

多线程安全问题的原因(也是我们以后判断一个程序是否有线程安全问题的依据)
A:是否是多线程环境
B:是否有共享数据
C:是否有多条语句操作共享数据

思考
虽然我们可以理解同步代码块和同步方法的锁对象问题,
但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,
为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象

Lock:
void lock():获取锁
void unlock():释放锁
这里写图片描述

从上面的案例我们可以发现创建和启动线程很麻烦,要单独创建一个类来创建线程和单独创建一个类来启动线程。所以以后我们更多的是采用匿名内部类的方式
这里写图片描述

如果想让一个线程在经过多长时间后执行并且可以重复执行这时候就要用到定时器了 (Timer和imerTask)

这里写图片描述
运行结果:经过3秒后会输出 beng,爆了
练习: 在指定的时间删除我们的指定目录?