当前位置: 首页 > news >正文

Java SE中的线程

1.创建线程

     方式一:通过Thread的子类创建,此时需要在Thread类的子类中重写父类的public void run()方法

     方式二:直接使用Thread类创建

                      用这种方式创建线程时,通常要使用以下构造方法:Thread(Runnable a) //Runnable是一个借口

                      此时需要在使用了Runnable接口的类中重写Thread类的public void run()方法

2.Thread类常用的方法

     start():启动线程,一般是在主函数中启动

     run():用来规定线程被启动以后,该线程所要执行的具体操作

     setName(String s):给线程取名

     getName():返回当前线程的名称

     sleep(int millsecond):是Thread类的类方法,该方法是线程在其run()方法中经常调用的方法,表示线程休眠一段时间,

                                        millsecond是其休眠的毫秒数;它必须在try--catch语句中被调用,异常类通常为InterruptedException

     isAlive():判断该线程是否处于运行状态

     currentThread():返回当前正在占用CPU资源的线程

     interrupt():当某个线程调用sleep()方法处于休眠状态时,该线程可以使用interrupted()方法吵醒自己,即导致休眠的线程发生

                        InterruptedException异常,从而结束休眠,重新排队等待CUP资源

3.线程同步

     是指若干个线程需要使用同一个synchronized修饰的方法

     用synchronized修饰的方法称为同步方法

     当一个线程A正在使用某个同步方法时,其它线程要想在此时也使用该同步方法就必须等待,直到线程A使用完该方法

     注意:当一个线程使用的同步方法中用到某个变量,而此变量又需要其他线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法,该方法可以中断同步方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其他线程使用这个同步方法;其他线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待;曾中断的线程就会从刚才的中断处继续执行这个同步方法,并遵循“先中断先继续”的原则;如果使用notify()方法,那么只是通知处于等待中的线程的某一个结束等待

wait(),notify()和notifyAll()只能在同步方法中使用

 

 

               

                                                

 

 

 

 

 

相关文章:

  • HTML 页面中的 SVG
  • ODBC方式连接数据库
  • java.io.File类
  • bootstrap导入JavaScript插件
  • 字节输入输出流:java.io.FileInputStream和java.io.FileOutputStream
  • HDU 2019
  • 字符输入输出流:java.io.FileReader和java.io.FileWriter
  • App Store官方邮箱列表--(推荐收藏)
  • 字符串输入输出流:java.io.BufferedReader和java.io.BufferedWriter
  • System.in与System.out流
  • Mac 系统下安装 IntelliJ IDEA
  • Runtime类
  • 注册MyEclipse6.5
  • MyEclipse6.5中搭建Web环境(使用Tomcat6.0服务器)
  • H5 App如此强悍,要降薪的恐怕已不只是iOS程序员
  • 【Amaple教程】5. 插件
  • 2017届校招提前批面试回顾
  • CSS实用技巧干货
  • css选择器
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES2017异步函数现已正式可用
  • js正则,这点儿就够用了
  • PhantomJS 安装
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 大数据与云计算学习:数据分析(二)
  • 当SetTimeout遇到了字符串
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 数据可视化之下发图实践
  • #git 撤消对文件的更改
  • #HarmonyOS:基础语法
  • #每天一道面试题# 什么是MySQL的回表查询
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C++)八皇后问题
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)jQuery 基础
  • .a文件和.so文件
  • .net反编译的九款神器
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Autowired和@Resource的区别
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [100天算法】-目标和(day 79)
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android] Implementation vs API dependency
  • [android] 练习PopupWindow实现对话框
  • [BeginCTF]真龙之力
  • [bzoj1324]Exca王者之剑_最小割
  • [C# 网络编程系列]专题六:UDP编程
  • [C++] new和delete
  • [Contiki系列论文之2]WSN的自适应通信架构