江帅帅 | 奈学教育
江帅帅 | 奈学教育 - 架构师
实名认证 专业认证

性别: 北京 - 北京市 注册于 2020-06-15

擅长:Java,Python

向TA求助
41金币数
2947 经验值
2个粉丝
主页被访问 788 次

最近动态

4小时前 发表了文章

4小时前 发表了文章

4小时前 发表了文章

2020-08-24 10:21 发表了文章

2020-08-20 19:03 回答问题

当程序使用 new 关键字创建了一个线程之后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Java虚拟机为其分配内存,并初始化其成员变量的值。此时的线程对象没有表现出任何线程的动态特征,程序也不会执行线程的线程执行体。当线程对象调用了start()方法之后,该线程处于就绪状态,Java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态中的线程并没有开始运行,只是表示该线程可以运行了。至于该线程何时开始运行,取决于JVM里线程调度器的调度。

2020-08-20 19:03 回答问题

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直“霸占”着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。

2020-08-20 19:02 回答问题

通过继承Thread类或实现Runnable、Callable接口都可以实现多线程,不过实现Runnable接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法有返回值,可以声明抛出异常而已。因此可以将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式之间的主要差别如下。采用实现Runnable、Callable接口的方式创建多线程—— 线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。 在这种方式下,多个

2020-08-20 19:02 回答问题

在Future接口里定义了如下几个公共方法来控制它关联的Callable任务。 boolean cancel(boolean mayInterruptIfRunning):试图取消该Future里关联的Callable任务。 V get():返回Callable任务里call()方法的返回值。调用该方法将导致程序阻塞,必须等到子线程结束后才会得到返回值。 V get(long timeout,TimeUnit unit):返回Callable任务里call()方法的返回值。该方法让程序最多阻塞timeout

2020-08-20 19:02 回答问题

创建并启动有返回值的线程的步骤如下: (1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值; (2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值; (3)使用FutureTask对象作为Thread对象的target创建并启动新线程; (4)调用FutureTask对象的get()方法来获得子线程执行结

2020-08-20 19:02 回答问题

实现Runnable接口来创建并启动多线程的步骤如下: (1)定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体; (2)创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。