java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用?
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() 方 法为何不推荐使用?相关推荐
- Java中有几种方法可以实现一个线程??用什么关键字修饰同步方法??stop()和suspend()方法为什么不推荐使用??
1. Java中有几种方法可以实现一个线程?? 两种,分别是继承thread类和实现Runnable类接口. 第一种: new Thread(){}.start();这表示调用Thread子类对象的r ...
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
答: 1.有两种实现方法,分别是继承Thread类与实现Runnable接口 继承扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了. 2.用synchronized关 ...
- command对象提供的3个execute方法是_并发面试题:java中有几种方法可以实现一个线程?...
创建并启动线程的6种方式 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和FutureTask创建线程 使用线程池,例如用Executor框架 Spring实现多线 ...
- 请回答一下Java中有几种线程池及实现过程?
请回答一下Java中有几种线程池及实现过程? 1.newFixedThreadPool创建一个指定工作线程数量的线程池.每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将 ...
- java使用2种方法操作liberoffice把word转pdf,pdf加水印,java远程调用Linux执行命令
文章目录 libreoffice下载地址 安装 (第一种) java调用 (第二种 推荐) java调用Linux命令转pdf java远程连接Linux执行命令(少数情况) linux安装windo ...
- java基本数据类型_Java面试题Java中有几种基本数据类型?它们分别占多大字节?...
点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...
- 如何将Word转成PDF格式?这三种方法总有一个适合你
如何把Word文档转换成PDF文件格式呢?大家在传输文件的时候,相信很多小伙伴都喜欢不使用PDF文件格式,因为它非常的稳定,在浏览文件的时候格式不会乱,但我们都是先做好Word文档,然后再把它转成PD ...
- 4、变量和方法被static和final两个关键字修饰,为什么这么做?
常常看到变量和方法被static和final两个关键字修饰,为什么这么做? 这么做有两个目的: 1.变量和方法于类无关,可以直接使用,使用比较方便: 2.强调变量内存地址的不可变性,方法不可继承覆写, ...
- java中三种方法_Java文件I/O的三种方法
Java文件I/O的三种方法 RandomAccessFile是不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(Data ...
最新文章
- php如何批量导入题库,批量文本导入试题
- C# dataTable 转 IList 问题
- [云炬创业基础笔记]第十章企业的利润计划测试8
- 【k8s】kuboard获取token命令
- 内存不能为读写的解决方法
- kvm最小磁盘大于等于5G
- extjs grid显示html,Extjs grid column里添加button等html标签,并增加点击事件
- 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分...
- 多普勒优化的非匹配滤波器
- Looksery Cup 2015 A. Face Detection
- 【软件使用】Macbook M1 QuickTime录屏讲解(只录电脑或者同时录电脑和麦克风人声)
- V4L2驱动框架详解
- 机器学习之手写字体(digits)识别——利用sklearn实现
- JavaScript系列之高级篇(2)
- ahocorasick使用
- 全面剖析:“外包”浪潮以及程序员应对攻略
- 当 webpack 遇上 symlink
- three good things
- 茅台酒如何转卖?价格如何才最合理?爬取公众号后每天自动发送价格到钉钉如何呢?
- 网络设备监控之思科Cisco设备监控及SNMP配置