/*
* 线程的常用方法
* 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多线程的常用方法(以及注意事项)的更多相关文章

  1. java多线程的常用方法

    介绍一些多线程中的常用方法: //启动方法 a.start(); //返回代码正在被哪个线程调用的信息 a.currentThread(); //返回线程的名字 a.currentThread().g ...

  2. Java多线程-----Thread常用方法

    1.public Thread(Runnable target,String name) 创建一个有名称的线程对象 package com.thread.mothed; public class Th ...

  3. Java多线程常用方法的使用

    Java多线程的常用方法基本分为:获取当前线程的操作,线程休眠sleep()方法,线程让步yield()方法,等待其他线程终止join()方法,线程停止的一系列方法. 一.获取当前线程的操作   1. ...

  4. Java多线程(一) 多线程的基本使用

    在总结JDBC数据库连接池的时候,发现Java多线程这块掌握得不是很好,因此回头看了下多线程的内容.做一下多线程模块的学习和总结,稳固一下多线程这块的基础.关于多线程的一些理论知识,这里不想啰嗦太多, ...

  5. Java多线程中的常用方法

    本文将带你讲诉Java多线程中的常用方法   Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...

  6. Java多线程并发02——线程的生命周期与常用方法,你都掌握了吗

    在上一章,为大家介绍了线程的一些基础知识,线程的创建与终止.本期将为各位带来线程的生命周期与常用方法.关注我的公众号「Java面典」了解更多 Java 相关知识点. 线程生命周期 一个线程不是被创建了 ...

  7. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  8. Java多线程学习(一)Java多线程入门

    转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79640870 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...

  9. Java多线程干货系列—(一)Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

随机推荐

  1. CodeForces 567C Geometric Progression

    Geometric Progression Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  2. CodeForces 34B Sale

    Sale Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status ...

  3. 遇到问题-----JS中设置window.location.href跳转无效(在a标签里或这form表单里)

    问题情况 JS中设置window.location.href跳转无效 代码如下: ? 1 2 3 4 5 6 7 8 <script type="text/javascript&quo ...

  4. 模块mod_h323的编译

    去h.323plus官网上下载关联的库 http://www.h323plus.org/source/ 很贴心,分操作系统下载,而且关联的ptlib库的版本也一并列了出来. 一.编译ptlib库 ex ...

  5. [HDOJ5763]Another Meaning(KMP, DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763 题意:给定两个字符串a和b,其中a中的字符串如果含有子串b,那么那部分可以被替换成*.问有多少种 ...

  6. C# WPF MVVM 实战 – 4 - 善用 IValueConverter

    IValueConverter,做 WPF 的都应该接触过,把值换成 Visibility .Margin 等等是最常见的例子,也有很多很好的博文解释过用法.本文只是解释一下,MVVM 中一些情景. ...

  7. JavaScript经典代码【一】【javascript HTML控件获取值】

    javascript HTML控件获取值 1.下拉列表框选定值 ddlPageSize.options[ddlPageSize.selectedIndex].value ddlPageSize.opt ...

  8. Object-C中的排序和Compare陷阱

    来源:http://m.blog.csdn.net/blog/u011883764/38868097 Date : 2015-12-24 一.Compare陷阱 NSString有多个compare相 ...

  9. flex布局注意点:

    1.父元素display:flex之后成为伸缩容器,子元素(除了position:absolute或fixed)无论是display:block或者display:inline,都成为了伸缩项目.2. ...

  10. STL--list

    List-概述: 列表List是一个线性链表结构(Double—Linked Lists,双链表),它的数据由若干个节点构成,每一个节点都包括一个信息块Info(即实际存储的数据).一个前驱指针Pre ...