java多线程的常用方法(以及注意事项)
时间:2022-05-05
本文章向大家介绍java多线程的常用方法(以及注意事项),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 /*
2 * 线程的常用方法
3 * 1.start();
4 * 2.run();
5 * 3.sleep(int millsecond);
6 * 4.isAlive(); -->判断线程是否还在运行
7 * 5.currentThread(); -->返回当前正在使用CPU资源的线程
8 * 6.interrupt(); -->激活休眠的线程
9 * */
但是需要注意的一个小点是:
1 /*
2 * 需要注意到地方:一个已经运行的线程在没有进入死亡状态时,
3 * 不要在给线程分配实体,由于线程只能引用最后分配的实体,
4 * 先前的实体就会成为“垃圾”,并且不会被垃圾收集器收集掉
5 * */
如果在执行一行这样的代码:
Thread = new Thread(Target);
会产生这样的一个效果,如图:
便会又开始建立一个线程,这样Thread原先的线程就会变成垃圾实体。而且更重要的是垃圾集收器不会去处理它,
因为JVM(java virtual Machine(java虚拟机))会认为原先的那个实体正在运行状态,如果突然释放掉内存,可能
会引起错误甚至设备的毁坏 。
如果在一个开启线程的情况下,有重新开启线程会怎么样勒?
代码:
1 import java.text.SimpleDateFormat;
2 import java.util.Date;
3
4 public class Example12_5 {
5 public static void main(String args [])
6 {
7 Home home = new Home();
8 Thread showTime = new Thread(home);
9 showTime.start();
10 }
11 }
12
13 class Home implements Runnable
14 {
15 int time=0;
16 SimpleDateFormat m = new SimpleDateFormat("hh:mm:ss");
17 Date date;
18 public void run() {
19 // TODO Auto-generated method stub
20 while(time<10)
21 {
22 date = new Date();
23 System.out.println(m.format(date));
24 time++;
25 try {
26 Thread.sleep(1000);
27 } catch (InterruptedException e) {
28 // TODO Auto-generated catch block
29 e.printStackTrace();
30 }
31 if(time==3)
32 {
33 Thread thread=Thread.currentThread();
34 thread = new Thread(this);
35 thread.start();
36 }
37 }
38 }
39 }
效果图:
看到上图中的 :
你会发现每一次都出现两个相同的时间,这便是垃圾实体和新实体都在运行的结果..
下面介绍一下介绍一下currentThread()-->即当前线程 和 interrupt() ----》来激活被sleep()处于休眠的线程
1 /*
2 * 有两个线程: student和teacher 其中student准备睡觉一小时后在开始上课,
3 * teacher在输出3句“上课”后在开始上课,teacher在输出3句“上课”后,吵醒
4 * 休眠的线程student。
5 */
1 public class Example12_6 {
2 public static void main(String args [] )
3 {
4 ClassRoom classroom = new ClassRoom();
5 classroom.student.start();
6 classroom.teacher.start();
7 }
8 }
9
10 class ClassRoom implements Runnable
11 {
12 Thread student ,teacher ; //教室里有student和teacher两个线程
13 ClassRoom()
14 {
15 teacher = new Thread(this);
16 student = new Thread(this);
17 teacher.setName("王老师");
18 student.setName("张兰");
19 }
20 public void run() {
21 // TODO Auto-generated method stub
22 if(Thread.currentThread()==student)
23 {
24 out(student.getName()+"正在睡觉,不听课");
25 try {
26 Thread.sleep(1000*360);
27 } catch (InterruptedException e) {
28 // TODO Auto-generated catch block
29 //e.printStackTrace();
30 out(student.getName()+"被老师叫醒了");
31 }
32 out(student.getName()+"开始听课了");
33 }
34 else if(Thread.currentThread()==teacher)
35 {
36 for(int i=1;i<=3;i++)
37 out("上课!");
38 try {
39 Thread.sleep(400);
40 } catch (InterruptedException e) {
41 // TODO Auto-generated catch block
42 // e.printStackTrace();
43 }
44 student.interrupt(); //激活原先休眠的student
45 }
46 }
47
48 void out(String str) {
49 System.out.println(str);
50 }
51 }
效果图:
- CaseStudy(showcase)布局篇-如何做一个自适应窗口大小的布局
- WCF后续之旅(2): 如何对Channel Layer进行扩展——创建自定义Channel
- [Silverlight动画]转向行为 - 到达行为
- Asp.Net统一前后端提示信息方案
- 人工智能:未来决策制定的机遇与影响
- CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧
- [Silverlight动画]转向行为 - 避开行为
- CaseStudy(showcase)界面篇-desing设计界面
- [Silverlight动画]转向行为 - 寻找行为
- 【数字货币】数字黄金
- [Silverlight动画]转向行为 - 转向机车
- [Silverlight动画]转向行为 - 机车
- 微信、小游戏与未来
- [Silverlight动画]转向行为 - 2D向量
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题
- linux常用工具vi/vim的使用完整版
- Linux下监视NVIDIA的GPU使用情况详解
- Linux下安装jdk1.8并配置环境变量的教程
- Linux中Homebrew的正确使用方法
- Linux中awk的使用方法详解
- Django上线部署之Apache的方法
- centos7系统下python2与python3共存
- linux把一个文件的内容复制到另一个文件的末尾
- 详解linux下nohup日志输出过大问题解决方案
- K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问
- linux模糊查找文件用什么命令比较好
- Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法
- Linux C 后台服务程序单进程控制的实现
- Linux下SSH免密码登录配置详解