美文网首页
Java线程基础

Java线程基础

作者: 林嘻嘻呀 | 来源:发表于2020-05-18 17:28 被阅读0次

创建线程

  1. new Thread
  2. new Runnable
  3. FutureTask:用来处理有返回结果的情况
    FutureTask<Integer> task3 = new FutureTask<>(() -> {
     log.debug("hello");
     return 100;
    });
    
    new Thread(task3, "t3").start();
    
    //主线程阻塞,同步等待 task 执行完毕的结果
    Integer result = task3.get();
    

ThreadRunnable关系:

public class Thread implements Runnable{
    //Thread属性之一
    private Runnable target;
    //当把Runnable作为参数传递给Thread,其实就是给Thread的target属性赋值
    public Thread(Runnable target) {
        this(null, target, "Thread-" + nextThreadNum(), 0);
    }
    //调用Thread的run方法实际还是调用Runnable的run方法,如果没有Runnable,就调用自己重写的方法
    public void run() {
        if (target != null) {
            target.run();
        }
    }
}

public interface Runnable {
    public abstract void run();
}

线程一些方法

方法名 功能说明 注意
start() 启动一个新线程,在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次会出现IllegalThreadStateException
join(long n) 等待线程运行结束,有参数表示最多等待n毫秒,没有就是无限时长
isInterrupted() 判断是否被打断 不会清除打断标记
interrupt() 打断线程 如果被打断线程正在 sleep,wait,join 会导致被打断的线程抛出 InterruptedException,并清除打断标记;如果打断的正在运行的线程,则会设置打断标记;park的线程被打断,也会设置打断标记
interrupted() 判断当前线程是否被打断 会清除 打断标记
currentThread() 获取当前正在执行的线程
sleep(long n) 让当前执行的线程休眠n毫秒,休眠时让出 cpu 的时间片给其它线程
yield() 提示线程调度器让出当前线程对CPU的使用 主要是为了测试和调试

start( ) 与 run( )

  • 直接调用 run 是在主线程中执行了 run,没有启动新的线程
  • 使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码

sleep与yield
sleep

  1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)
  2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出InterruptedException,并清除打断标记,如果还想要打断标记,则在catch块里再调用interrupt
  3. 睡眠结束后的线程未必会立刻得到执行

yield

  1. 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程
  2. 具体的实现依赖于操作系统的任务调度器,CPU有可能选择调用该线程

相关文章

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • Android中的多线程

    1. Java多线程基础 Java多线程,线程同步,线程通讯 2. Android常用线程 HandlerThre...

  • Java基础

    Java基础 集合基础 集合框架 多线程基础 多线程框架 反射 代理 集合基础 ArrayList LinkedL...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • java线程入门基础(二)

    java线程入门基础(二) 一、认识Java里的线程 1.1 Java里的程序天生就是多线程的 一个Java程序从...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

  • 高并发Java

    高并发Java(1):前言 高并发Java(2):多线程基础 高并发Java(3):Java内存模型和线程安全 高...

  • Java-并发编程知识点总结

    目录: 线程基础 线程池 各种各样的锁 并发容器 原子类 Java 内存模型 线程协作 AQS 框架 一、线程基础...

网友评论

      本文标题:Java线程基础

      本文链接:https://www.haomeiwen.com/subject/zikpohtx.html