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

第一种:继承Thread类

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

new Thread(){

public void run(){

}}.start();

第二种:实现Runnable接口

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

new Thread(new Runnable(){

public void run(){

}}).start();

第三种:

使用线程池创建多线程:

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(){}});

用synchronized关键字修饰同步方法。

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,并且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。 suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其它任何线程都不能访问锁定的资源,除非被”挂起“的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应该在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,使用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

java中实现线程的方法_Java中实现线程的方法相关推荐

  1. java 终止方法_Java中终止线程的三种方法

    Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...

  2. JAVA中初始化线程的两种方法_java中最简单的方式新起一个线程

    启动一个线程 在一个方法中启动一个线程,有两种方法 第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法) 第二种是,现在方法中new一个线程,然后直接调 ...

  3. java单例模式的实现方法_Java中的五种单例模式实现方法

    Ext4 ComboBox组件使用 先来看例子: Ext.define('schoolModel', { extend: 'Ext.data.Model', fields: [{ name: 'id' ...

  4. java多线程中方法_java中多线程 - 多线程中的基本方法

    介绍一下线程中基本的方法使用 线程睡眠sleep() Thread.sleep(毫秒);我们可以通过sleep方法设置让线程睡眠.可以看到sleep是个静态方法 public static nativ ...

  5. java中容易混淆的方法_java中容易混淆的概念

    java中容易混淆的概念 1. 谈谈 final, finally, finalize 的区别final-修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不 能作为父类被 ...

  6. java i 线程不安全_java中的++i是线程安全的吗?

    java中的++i是线程安全的吗?为什么?怎么使它线程安全呢? 先说答案: 非线程安全 先说下为什么是非线程安全的? 从Java内存模型说起 Java内存模型规定了所有的便利都存储在主内存中,每个线程 ...

  7. java 线程类 通信_Java 中利用管道实现线程间的通讯

    在Java 语言中,提供了各种各样的输入输出流(stream),使我们能够很方便的对数据进行操作,其中,管道(pipe)流是一种特殊的流,用于在不同线程(threads)间直接传送数据.一个线程发送数 ...

  8. java怎样获取线程的进度_java中的多线程——进度2

    多线程总结: 1,进程和线程的概念. |--进程:是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元: 最小的内存单元: 是具有一定独立功能的程序关于某个数据集合上的一次运行 ...

  9. java 线程执行结束_java中怎么判断线程执行完毕

    java中怎么判断线程执行完毕 发布时间:2020-05-15 15:18:05 来源:亿速云 阅读:316 作者:Leah java中怎么判断线程执行完毕?针对这个问题,今天小编总结这篇有关线程判断 ...

最新文章

  1. C语言do...while语句的妙用(包裹宏替换多句代码)(代替go to语法)(隔绝外部变量)
  2. Linux 5.4 LVM RAW 设备 配置的深入研究
  3. 转:权限管理——用户认证和用户授权
  4. 月入10w+的offer,变成了整容、传销、网红届的韭菜
  5. VC6.0设置注释快捷键
  6. android中的surface
  7. C# winform 弹出输入框
  8. 软件行业各职位英文缩写
  9. springboot 配置 P6spy
  10. 使用yq工具合并两个yml文件
  11. python日历_用python做日历
  12. 吴伯凡-认知方法论-给思维一个支点
  13. 计算机专业可以从事平面设计吗,计算机专业和平面设计专业是一个专业不?
  14. 【流媒体开发】9、ffmpeg实现视频录制
  15. iPhone共享WIFI密码到Macbook - 无需在Mac上使用WIFI万能钥匙
  16. 参考文献格式字号字体_字体字号格式要求
  17. springboot 整合 mqtt 实现消息订阅
  18. 软件的第三方CNAS测试的目的和意义以及测试内容和流程
  19. 淘宝小部件在 2021 双十一中的规模化应用
  20. Dataload批量导入数据到EBS系统中(例子)--1019

热门文章

  1. 使用Maven的jaxws-maven-plugin插件,将wsdl生成java
  2. Hibernate中配置C3P0连接池
  3. IDEA本地运行Spark项目[演示自定义分区器]并查看HDFS结果文件
  4. 无心剑中译杰克•谢弗《当默多克遇到撒旦》
  5. bzoj4602 [Sdoi2016]齿轮 边权并查集
  6. vc6配置c语言编译环境,驱动WDK7600在VC6.0下的编译开发配置环境
  7. 【英语学习】【WOTD】accolade 释义/词源/示例
  8. python脚本文件格式_Python 基础语法_Python脚本文件结构
  9. linux 好用的命令行软件,比较好用的linux命令
  10. apollo动态切换mysql数据源_log4j2从Apollo初始化配置并可动态变更