多线程01_入门

线程和进程

简单入门

多线程

1.创建多线程

  • 继承Thread类
  • 实现Runnable接口(推荐)
    因为一是避免Java单继承,二是面向接口编程

2.线程常用方法

  • 设置线程名
    • 通过线程构造器设置
    • 调用setName方法修改
  • 设置守护线程
    守护线程即服务线程,为其他线程服务,比如GC线程;当其他线程执行完,虚拟机退出时,守护线程也随之结束
    • 使用setDaemon(boolean on)来开启
    • 注意的地方
      • 先设置为守护线程再启动,否则报异常IllegalThreaStateException()
      • 守护线程中产生的线程也是守护线程
      • 使用守护线程不要访问共享资源,比如数据库、文件等,因为不知道它什么时候会结束
  • 设置线程优先级
    仅仅是增大线程获取cpu的几率,Java提供的优先级默认是5,最低是1,最高是10
    • 使用setPriority方法设置
  • 中断进程
    • 正常进程调用interrupt方法仅仅是设置了一个中断标志为true,线程继续执行不受影响
    • 阻塞状态的线程调用interrupt方法,那么会抛出中断异常(用户捕捉到中断异常可以进行自定义操作),设置中断标志位为false,同时该线程会退出阻塞
    • isInterrupted方法可以返回当前中断标志,用户可以用其监听中断状态while(!Thread.currentThread.isInterrupted()){},当中断时执行中断处理代码
    • interrupted方法返回当前中断标志,同时重置中断标志为false
  • 阻塞方法
    • 线程睡眠sleep方法和线程让步yeild方法
      • 两者相似,sleep方法可以设置线程暂停时间,同时让出CPU,进入不可运行状态;让其他线程有机会执行,但是不释放锁,即其他线程不能访问共享数据
      • yeild方法也是使线程暂停,同时让出CPU,但是它仍处于可运行状态;它是让相同优先级的线程有机会执行,如果检测没有同优先级的线程,它会继续执行原来的线程,它也不释放锁
    • 线程同步join方法
      • join方法是暂停当前线程的执行,而等待指定线程执行完毕或者执行一定时间
      • 参数可选填时间,表示指定线程执行时间
      • 必须在start之后使用才有意义
      • join使线程的并发执行变成串行执行
      • join使用了线程的wait方法来实现同步,如果A线程内调用B线程的join,就是A当线程调用了B线程的wait方法,A线程进入阻塞状态,直到B线程执行完

3.线程生命周期

4.简单代码测试

测试一

猜你喜欢

转载自www.cnblogs.com/pycrab/p/9573632.html
今日推荐