写点什么

学习高并发的前置知识——Java 中的线程基础,springcloud 实战演练

用户头像
极客good
关注
发布于: 刚刚

}

[](

)下面是 Thread 类


public class Thread implements Runnable {


// 大量的类和方法...


}

[](

)Runnable


public class ThreadTest {


public static class MyRunnable implements Runnable {


@Override


public void run() {


System.out.println(Thread.currentThread() + " here");


}


}


public static void main(String[] args) {


MyRunnable task = new MyRunnable();


new Thread(task).start();


new Thread(task).start(); // 可以启动多个


}


}


Runnable 接口


@FunctionalInterface


public interface Runnable {


public abstract void run();


}

[](

)Callable FutureTask


public class ThreadTest {


public static class CallerTask implements Callable<String> {


@Override


public String call() throws Exception {


return "hello";


}


}


public static void main(String[] args) {


FutureTask<String> futureTask = new FutureTask<>(new CallerTask());


new Thread(futureTask).start();


try {


String result = futureTask.get(); // 返回结果


System.out.println(Thread.currentThread() + result);


} catch (InterruptedException | ExecutionException e) {


e.printStackTrace();


}


}


}


@FunctionalInterface


public interface Callable<V> {


/**


  • Com


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


putes a result, or throws an exception if unable to do so.


  • @return computed result


*/


V call() throws Exception;


}


public class FutureTask<V> implements RunnableFuture<V> {


// 类和方法...


}


[](


)线程中的方法




[](


)join




如果想让某几件事情做完之后再进行下面的事情,就可以用join()方法。是Thread中的方法。


[一起吹水聊天](


)


threadA.join(); // 当 main 线程执行到这里,会阻塞,等到 ThreadA 执行完毕后再执行 ThreadB()


threadB.join(); // 同理,会再次阻塞。

[](

)sleep


线程被阻塞,持有的锁或监视器资源不会释放,睡眠时间到了之后就会回到就绪状态,获取 CPU 后继续执行。


Thread.sleep(1000);

[](

)yield


当一个线程使用yield方法时,暗示线程调度器当前线程要让出 CPU 资源,但是线程调度器可以忽略这个暗示。如果执行成功,线程会进入就绪状态。


[](


)线程状态




Java 中线程分为六种状态


  • New(新建)

  • Runnable(可运行)

  • Blocked(阻塞)

  • Waiting(等待)

  • Timed waiting(计时等待)

  • Terminated(终止)



  • Java 没有将正在运行作为一个单独的状态。一个正在运行的线程仍然处于可运行的状态。

  • 线程调度的细节依赖于操作系统提供的服务。

[](

)New(新建)


[一起吹水聊天](


)


当用 new 操作符创建一个新线程时,如 new Thread();

[](

)Runnable(可运行)


一旦调用 start() 方法,线程就处于可运行状态

[](

)阻塞、等待、计时等待


当线程处于阻塞或等待状态时,它暂时是不活动的。它不运行任何代码,而且消耗最少的资源。要由线程调度器重新激活这个线程。具体细节取决于它是怎样达到非活动状态的。


  • 当一个线程试图获取一个内部的对象锁,而且这个锁目前被其它线程占用,就会进入阻塞状态。

  • 当线程等待另一个线程通知调度器出现一个条件时,这个线程会进入等待状态。

  • 有几个方法有超时参数,调用这些方法会让线程进入计时等待状态。知道超时期满或接收到适当的通知。

[](

)Terminated(终止)


线程会由于以下两个原因而终止


  • run() 方法正常退出,线程自然终止。

  • 因为一个没有捕获的异常终止了 run() 方法,使线程意外终止。

[](

)线程中的 6 个状态


public enum State {


/**


  • Thread state for a thread which has not yet started.


*/


NEW,


/**


  • Thread state for a runnable thread. A thread in the runnable

  • state is executing in the Java virtual machine but it may

  • be waiting for other resources from the operating system

  • such as processor.


*/


RUNNABLE,


/**


  • Thread state for a thread blocked waiting for a monitor lock.

  • A thread in the blocked state is waiting for a monitor lock

  • to enter a synchronized block/method or

  • reenter a synchronized block/method after calling

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
学习高并发的前置知识——Java中的线程基础,springcloud实战演练