/*
* 线程的常用方法
* 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. CentOS 7 (无盘安装)PXE服务器的搭建(失败求助版)

    折腾了一天半,PXE无盘服务器以暂时失败而告终. 基本原理 1. 首先客户端主机需要支持PXE,大部分主板都支持. 2. PXE服务器需要安装DHCP.TFTP.FTP服务. 3. DHCP服务用来给 ...

  2. [CF355C]Vasya and Robot(思维,贪心)

    题目链接:http://codeforces.com/contest/355/problem/C 题意:1~n n个物品各重wi,现在有一个人可以从左边拿和从右边拿, 左边拿一个物品的花费是l*wi, ...

  3. 字符串表达式String Expressions

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. Java——Image 图片切割

    package com.tb.image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io ...

  5. new的深一步

    new的深一步 new运算符 用于创建对象和条用构造函数 new修饰符 用于隐藏基类中被继承的成员 new约束 用于在泛型声明中约束可能用作类型参数的参数类型 new运算符 用于创建对象和调用构造函数 ...

  6. Maven中<dependencies>节点和<dependencyManagement>节点的区别 转

    以前一直没有在意,今天建立maven工程的时候在<dependencyManagement>节点下加入了junit依赖,结果在dependency Graph中没有发现junit的依赖关系 ...

  7. Http协议简单学习笔记

    HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程. 在HTTP1.0 ...

  8. 使用ioctl“实现”自定义的系统调用

    http://www.educity.cn/Linux/1242138.html 最近做的项目跟Linux内核的关系比较大,我们的项目需要在用户态触发一些内核态的代码运行.众所周知,内核态的代码是不能 ...

  9. 图形处理的api

      [1]旋转      public class MainActivity extends Activity { private float degrees;// 图片旋转的角度 @Override ...

  10. Fragments

    http://developer.android.com/guide/components/fragments.html#Design Content Design Philosophy Creati ...