• java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?


    java5 以前, 有如下两种:
    第一种:
    new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类的实例对象, 子类加上 run 方法后的代码如下:

    1 new Thread(){
    2       public void run(){
    3     } 
    4 }.start();



    第二种:
    new Thread(new Runnable(){}).start();这表示调用 Thread 对象接受的 Runnable 对象的 run方法, new Runnable(){}表示一个 Runnable 的匿名子类的实例对象,runnable 的子类加上 run 方法后的代码如下:

    1 new Thread(new Runnable(){
    2         public void run(){
    3         } 
    4     }
    5  ).start();         

    java5 开始, 还有如下一些线程池创建多线程的方式:

     1 ExecutorService pool = Executors.newFixedThreadPool(3)
     2 for(int i=0;i<10;i++){
     3     pool.execute(new Runable(){
     4         public void run(){
     5         }
     6     });
     7 }
     8 Executors.newCachedThreadPool().execute(new Runable(){
     9     public void run(){
    10     }
    11 });
    12 Executors.newSingleThreadExecutor().execute(new Runable(
    13     {public void run(){
    14     }
    15 });             

     有两种实现方法, 分别使用 new Thread()new Thread(runnable)形式, 第一种直接调用
    thread run 方法, 所以, 我们往往使用 Thread 子类, 即 new SubThread()。 第二种调
    runnable run 方法。
    有两种实现方法, 分别是继承 Thread 类与实现 Runnable 接口
    synchronized 关键字修饰同步方法
    反对使用 stop(), 是因为它不安全。 它会解除由线程获取的所有锁定, 而且如果对象处
    于一种不连贯状态, 那么其他线程能在那种状态下检查和修改它们。 结果很难检查出
    真正的问题所在。 suspend()方法容易发生死锁。 调用 suspend()的时候, 目标线程会停
    下来, 但却仍然持有在这之前获得的锁定。 此时, 其他任何线程都不能访问锁定的资
    源, 除非被"挂起"的线程恢复运行。 对任何线程来说, 如果它们想恢复目标线程, 同
    时又试图使用任何一个锁定的资源, 就会造成死锁。 所以不应该使用 suspend(), 而应
    在自己的 Thread 类中置入一个标志, 指出线程应该活动还是挂起。 若标志指出线程应
    该挂起, 便用 wait()命其进入等待状态。 若标志指出线程应当恢复, 则用一个 notify()
    重新启动线程

     




  • 相关阅读:
    centos6和centos7升级openssh7.5脚本
    开通telnet服务,使用telnet登入
    彻底删除kafka的topic以及其中的数据
    redis集群创建
    curl 命令参数
    nginx.conf配置文件详解,白嫖的
    logstash迁移es数据
    es 常用查询
    pl/sql 存储过程
    es查看集群信息命令_cat和_cluster
  • 原文地址:https://www.cnblogs.com/zhaideyou/p/5935775.html
Copyright © 2020-2023  润新知