java多线程的常用方法(以及注意事项)
/*
* 线程的常用方法
* 1.start();
* 2.run();
* 3.sleep(int millsecond);
* 4.isAlive(); -->判断线程是否还在运行
* 5.currentThread(); -->返回当前正在使用CPU资源的线程
* 6.interrupt(); -->激活休眠的线程
* */
但是需要注意的一个小点是:
/*
* 需要注意到地方:一个已经运行的线程在没有进入死亡状态时,
* 不要在给线程分配实体,由于线程只能引用最后分配的实体,
* 先前的实体就会成为“垃圾”,并且不会被垃圾收集器收集掉
* */
如果在执行一行这样的代码:
Thread = new Thread(Target);
会产生这样的一个效果,如图:
便会又开始建立一个线程,这样Thread原先的线程就会变成垃圾实体。而且更重要的是垃圾集收器不会去处理它,
因为JVM(java virtual Machine(java虚拟机))会认为原先的那个实体正在运行状态,如果突然释放掉内存,可能
会引起错误甚至设备的毁坏 。
如果在一个开启线程的情况下,有重新开启线程会怎么样勒?
代码:
import java.text.SimpleDateFormat;
import java.util.Date; public class Example12_5 {
public static void main(String args [])
{
Home home = new Home();
Thread showTime = new Thread(home);
showTime.start();
}
} class Home implements Runnable
{
int time=0;
SimpleDateFormat m = new SimpleDateFormat("hh:mm:ss");
Date date;
public void run() {
// TODO Auto-generated method stub
while(time<10)
{
date = new Date();
System.out.println(m.format(date));
time++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(time==3)
{
Thread thread=Thread.currentThread();
thread = new Thread(this);
thread.start();
}
}
}
}
效果图:
看到上图中的 :
你会发现每一次都出现两个相同的时间,这便是垃圾实体和新实体都在运行的结果..
下面介绍一下介绍一下currentThread()-->即当前线程 和 interrupt() ----》来激活被sleep()处于休眠的线程
/*
* 有两个线程: student和teacher 其中student准备睡觉一小时后在开始上课,
* teacher在输出3句“上课”后在开始上课,teacher在输出3句“上课”后,吵醒
* 休眠的线程student。
*/
public class Example12_6 {
public static void main(String args [] )
{
ClassRoom classroom = new ClassRoom();
classroom.student.start();
classroom.teacher.start();
}
} class ClassRoom implements Runnable
{
Thread student ,teacher ; //教室里有student和teacher两个线程
ClassRoom()
{
teacher = new Thread(this);
student = new Thread(this);
teacher.setName("王老师");
student.setName("张兰");
}
public void run() {
// TODO Auto-generated method stub
if(Thread.currentThread()==student)
{
out(student.getName()+"正在睡觉,不听课");
try {
Thread.sleep(1000*360);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
out(student.getName()+"被老师叫醒了");
}
out(student.getName()+"开始听课了");
}
else if(Thread.currentThread()==teacher)
{
for(int i=1;i<=3;i++)
out("上课!");
try {
Thread.sleep(400);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
student.interrupt(); //激活原先休眠的student
}
} void out(String str) {
System.out.println(str);
}
}
效果图:
java多线程的常用方法(以及注意事项)的更多相关文章
- java多线程的常用方法
介绍一些多线程中的常用方法: //启动方法 a.start(); //返回代码正在被哪个线程调用的信息 a.currentThread(); //返回线程的名字 a.currentThread().g ...
- Java多线程-----Thread常用方法
1.public Thread(Runnable target,String name) 创建一个有名称的线程对象 package com.thread.mothed; public class Th ...
- Java多线程常用方法的使用
Java多线程的常用方法基本分为:获取当前线程的操作,线程休眠sleep()方法,线程让步yield()方法,等待其他线程终止join()方法,线程停止的一系列方法. 一.获取当前线程的操作 1. ...
- Java多线程(一) 多线程的基本使用
在总结JDBC数据库连接池的时候,发现Java多线程这块掌握得不是很好,因此回头看了下多线程的内容.做一下多线程模块的学习和总结,稳固一下多线程这块的基础.关于多线程的一些理论知识,这里不想啰嗦太多, ...
- Java多线程中的常用方法
本文将带你讲诉Java多线程中的常用方法 Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...
- Java多线程并发02——线程的生命周期与常用方法,你都掌握了吗
在上一章,为大家介绍了线程的一些基础知识,线程的创建与终止.本期将为各位带来线程的生命周期与常用方法.关注我的公众号「Java面典」了解更多 Java 相关知识点. 线程生命周期 一个线程不是被创建了 ...
- Java多线程编程核心技术
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
- Java多线程学习(一)Java多线程入门
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79640870 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- Java多线程干货系列—(一)Java多线程基础
前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...
随机推荐
- C++函数前和函数后加const修饰符区别
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...
- SignalR记录
服务端检索数据库,有跟新,推送给客户端 1: GlobalHost.ConnectionManager.GetHubContext<tvHub>().Clients.Client(Clie ...
- 【mark】linux 终端命令行下的快捷键(自己已验证所有)
说明: \c + a:表示ctrl+a \a + a:表示alt+a 命令列表: 1 移动: \c + a:将光标移到行首 \c + e:将光标移到行尾 \c + f:将光标向后(右)移动一个字符 \ ...
- 终止jQuery的$.ajax方法abort
最近遇到,如果用户频繁点击ajax请求,有两个问题: 1,如果连续点击了5个ajax请求,前4个其实是无效的,趁早结束节省资源. 2,更严重的问题是:最后一个发送的请求,响应未必是最后一个,有可能造成 ...
- Entity Framework 学习初级篇--基本操作:增加、更新、删除、事务(转)
摘自:http://www.cnblogs.com/xray2005/archive/2009/05/17/1458568.html 本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作 ...
- placeholder在ie浏览器里不显示的问题解决
<script type="text/javascript"> if( !('placeholder' in document.createElement('input ...
- thinkphp 初始配置
他喵的,去做了个其他的模板,一段时间不碰tp,居然配置了好久 记录留备用 一.把下好的ThinkPHP放到根目录的文件夹下 ,例如www文件夹下 在www目录下新建文件夹admin和home 新建入口 ...
- mysql概要(八)视图
1.视图使用时,以表的方式使用 视图修改 alter view 视图名 as select ...; 1.1创建视图: 2.视图的好处: 通过id取模存放四个表中,然后通过视图把表合成一张表: 3.视 ...
- springmvc企业级开发实战
一.用eclipse插件搭建项目 二.pom文件 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
- iOS 推送证书生成pem
cert: openssl x509 -in aps_development\ \(8\).cer -inform der -out pushDeveCerTopem.pem key: openssl ...