文库网
关注排行榜

当前无数据...

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

Java线程:你想了解的,我都有

Java线程的三种创建方式

  • 继承Thread对象

    1. <code class="prism language-java">class ThreadImpOne extends Thread{
    2. @Override
    3. public void run(){
    4. System.out.println("ThreadImpOne");
    5. }
    6. }
    7. </code>
    复制代码
  • 实现Runnalbe接口

    1. <code class="prism language-java">class ThreadImpTwo implements Runnable{
    2. @Override
    3. public void run() {
    4. System.out.println("ThreadImpTwo");
    5. }
    6. }
    7. </code>
    复制代码
  • 实现Callable接口

    1. <code class="prism language-java">import java.util.concurrent.Callable;
    2. import java.util.concurrent.FutureTask;
    3. public class Main{
    4. public static void main(String args[]) throws Exception{
    5. ThreadImpThree threadThree = new ThreadImpThree();
    6. FutureTask<Integer> task = new FutureTask<Integer>(threadThree);
    7. new Thread(task).start();
    8. System.out.println(task.get());
    9. }
    10. }
    11. class ThreadImpThree implements Callable<Integer>{
    12. @Override
    13. public Integer call(){
    14. System.out.println("ThreadThreeImp");
    15. return 666;
    16. }
    17. }
    18. //ThreadThreeImp
    19. //666
    20. </code>
    复制代码

Java线程五种状态

  • 新建状态(New): 线程对象被创建后,就进入了新建状态。Thread thread = new Thread()。
  • 就绪状态(Runnable): 可执行状态,等待CPU调度。新建状态调用thread.start()就进入了就绪状态
  • 运行状态(Running): 线程获取CPU时间进行执行
  • 阻塞状态(Blocked): 由于某中原因,放弃CPU使用权,暂时停止运行。放弃的原因主要分为三种
    • 等待阻塞:调用了同步对象的wait方法
    • 同步阻塞:线程获取synchnoized同步锁失败,进入同步阻塞状态
    • 其他阻塞:调用了线程的sleep、join方法或者发出了IO请求。sleep状态超时,join等待的线程执行完,或者I/O就绪时,线程会转入就绪状态
  • 死亡状态(Dead):线程执行完,或者异常退出,线程就会进入死亡状态。

{tilte}-疯吖疯

Java线程三种终止方式

  • 修改标志位

    比如在服务端程序中可能会使用 while(true) { ... }类似的循环结构来不断的接收来自客户端的请求。此时就可以用修改标志位的方式来结束 run() 方法的执行

    1. <code class="prism language-java">while(!exit){
    2. doSomething();
    3. }
    4. </code>
    复制代码
  • stop方法终止线程

    thread.stop()方法,可以立即终止线程,但是stop()方法不是安全的方法

    调用 stop() 方法会立刻停止 run() 方法中剩余的全部工作,包括在 catch 或 finally 语句中的,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。

  • interrupt方法

    thread.interrupt方法,区别于stop方法,线程执行此方法后,会将线程的中断标志设置为true.

    如果线程想响应中断,会进行中断操作,如果不想,就忽略此消息,线程的中断取决于线程本身。

    1. <code class="prism language-java">public class Main{
    2. public static void main(String args[]) throws Exception{
    3. Thread thread = new Thread(new ThreadImp());
    4. thread.start();
    5. Thread.sleep(3000);
    6. thread.interrupt();
    7. }
    8. }
    9. class ThreadImp extends Thread{
    10. @Override
    11. public void run() {
    12. while(true) {
    13. System.out.println(Thread.interrupted());
    14. for(int i = 0; i < 100000; i++) {
    15. for(int j = 0; j < 50000; j++)
    16. {long value = Integer.MAX_VALUE * Integer.MAX_VALUE;}
    17. }
    18. }
    19. }
    20. }
    21. //线程一直会运行,肯定会有一次输出true
    22. </code>
    复制代码

    上面线程会一直运行,并且只会输出一次true,其余均为false,想了解原因的,可以详细阅读一下线程中断机制,这里就不赘述了。

参考文章

Java 线程的 5 种状态

Java终止线程的三种方式


本站资源均由网上搜集或网友上传提供,内容仅供观摩学习交流之用,本站将不对任何资源负法律责任.如有侵犯您的版权,请及时联系我们(邮箱:892481490@qq.com,客服QQ:892481490),我们会尽快处理!QQ350550790是骗子,注意不要和他交易!!!
发帖求助前要善用【论坛搜索】功能, 那里可能会有你要找的答案,也能为你节约不少学习时间;
如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加(威望)和(贡献)而不会扣除自己的积分。
如发现灌水帖、病毒木马帖、广告帖、工具不能正常使用、网盘链接失效,请点击【举报】 核实有几率会给予额外的B币奖励哦!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    发布资源 快速回复 返回列表 客服中心 官方QQ群

    QQ|小黑屋|手机版|编程之家论坛 ( 桂ICP备18002029号 )

    Powered by 编程之家  © 20019-2021