60 、 java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用?
答: 有两种实现方法,分别是继承 Thread类与实现Runnable接口
分别使用 new Thread()和 new Thread(runnable)形式, 用 synchronized 关键字修饰同步方法
第一种直接调用thread 的 run 方法, 所以, 我们往往使用Thread 子类, 即 new SubThread()。
第二种调用 runnable 的 run 方法。
java5 以前, 有如下两种:
第一种:
new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类的实例对象, 子类加上 run 方法后的代码如下:

new Thread(){public void run(){} }.start();

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

 new Thread(new Runnable(){public void run(){} }).start(); 

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

ExecutorService pool = Executors.newFixedThreadPool(3)for(int i=0;i<10;i++){pool.execute(new Runable(){public void run(){}});}Executors.newCachedThreadPool().execute(new Runable(){public void run(){}});Executors.newSingleThreadExecutor().execute(new Runable({public void run(){}});   

stop()方法作为一种粗暴的线程终止行为,在线程终止之前没有对其做任何的清除操作,因此具有固有的不安全性。 用Thread.stop()方法来终止线程将会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果 很难检查出真正的问题所在。 由于上述原因,因此不应该使用stop()方法,而应该在自己的Thread类中置入一个标志,用于控制目标线程是活动还是停止。如果该标志指示它要停止运行,可使其结束run()方法。如果目标线程等待很长时间,则应使用interrupt()方法来中断该等待。
suspend()方法 该方法已经遭到反对,因为它具有固有的死锁倾向。调用suspend()方法的时候,目标线程会停下来。如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,则在目标线程重新开始以前,其他线程都不能访问该资源。除非被挂起的线程恢复运行。对任何其他线程来说,如果想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。由于上述原因,因此不应该使用suspend()方法,而应在自己的thread类中置入一个标志,用于控制线程是活动还是挂起。如果标志指出线程应该挂起,那么用wait()方法命令其进入等待状态。如果标志指出线程应当恢复,那么用notify()方法重新启动线程。

扩展:线程的生命周期解析图:

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

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

    1. Java中有几种方法可以实现一个线程?? 两种,分别是继承thread类和实现Runnable类接口. 第一种: new Thread(){}.start();这表示调用Thread子类对象的r ...

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

    答: 1.有两种实现方法,分别是继承Thread类与实现Runnable接口 继承扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了. 2.用synchronized关 ...

  3. command对象提供的3个execute方法是_并发面试题:java中有几种方法可以实现一个线程?...

    创建并启动线程的6种方式 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和FutureTask创建线程 使用线程池,例如用Executor框架 Spring实现多线 ...

  4. 请回答一下Java中有几种线程池及实现过程?

    请回答一下Java中有几种线程池及实现过程? 1.newFixedThreadPool创建一个指定工作线程数量的线程池.每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将 ...

  5. java使用2种方法操作liberoffice把word转pdf,pdf加水印,java远程调用Linux执行命令

    文章目录 libreoffice下载地址 安装 (第一种) java调用 (第二种 推荐) java调用Linux命令转pdf java远程连接Linux执行命令(少数情况) linux安装windo ...

  6. java基本数据类型_Java面试题Java中有几种基本数据类型?它们分别占多大字节?...

    点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...

  7. 如何将Word转成PDF格式?这三种方法总有一个适合你

    如何把Word文档转换成PDF文件格式呢?大家在传输文件的时候,相信很多小伙伴都喜欢不使用PDF文件格式,因为它非常的稳定,在浏览文件的时候格式不会乱,但我们都是先做好Word文档,然后再把它转成PD ...

  8. 4、变量和方法被static和final两个关键字修饰,为什么这么做?

    常常看到变量和方法被static和final两个关键字修饰,为什么这么做? 这么做有两个目的: 1.变量和方法于类无关,可以直接使用,使用比较方便: 2.强调变量内存地址的不可变性,方法不可继承覆写, ...

  9. java中三种方法_Java文件I/O的三种方法

    Java文件I/O的三种方法 RandomAccessFile是不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(Data ...

最新文章

  1. php如何批量导入题库,批量文本导入试题
  2. C# dataTable 转 IList 问题
  3. [云炬创业基础笔记]第十章企业的利润计划测试8
  4. 【k8s】kuboard获取token命令
  5. 内存不能为读写的解决方法
  6. kvm最小磁盘大于等于5G
  7. extjs grid显示html,Extjs grid column里添加button等html标签,并增加点击事件
  8. 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分...
  9. 多普勒优化的非匹配滤波器
  10. Looksery Cup 2015 A. Face Detection
  11. 【软件使用】Macbook M1 QuickTime录屏讲解(只录电脑或者同时录电脑和麦克风人声)
  12. V4L2驱动框架详解
  13. 机器学习之手写字体(digits)识别——利用sklearn实现
  14. JavaScript系列之高级篇(2)
  15. ahocorasick使用
  16. 全面剖析:“外包”浪潮以及程序员应对攻略
  17. 当 webpack 遇上 symlink
  18. three good things
  19. 茅台酒如何转卖?价格如何才最合理?爬取公众号后每天自动发送价格到钉钉如何呢?
  20. 网络设备监控之思科Cisco设备监控及SNMP配置

热门文章

  1. Linux桌面i3与i7,i3吊打i7?——你所不知的CPU型号后缀的秘密
  2. 微信小程序模板-分页滑动栏
  3. HTML5CSS3基础:HTML的图片、音频、视频(3)
  4. 计算机软件技术介绍ppt,计算机软件技术基础.ppt
  5. Python批量word2pdf、ppt2pdf
  6. java查找图片_用java查找图片中的图片?
  7. 【动态】雷电网络预览:以太坊扩容解决方案发布开发者演示
  8. 以太网数据连接器行业现状调研及趋势分析报告
  9. 利用CIBERSORT免疫细胞类群分析详细教程
  10. 小话设计模式(番外二)委托模式