/*
* 线程的常用方法
* 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. 使用entityframework操作sqlite数据库

    首先要安装好,所需要的类库,通过NuGet来处理 http://stackoverflow.com/questions/28507904/vs-2015-sqlite-data-provider 安装 ...

  2. ARM工作模式

    ARM工作模式 学习ARM的最好的资料是ARM公司发布的资料:ARM Architecture Reference Manual.pdf 找到章节:Programmers’ Model 由文档可知:A ...

  3. git 简单用

    之前一直用svn,用git也只是从github上clone代码.现在自己试试用git做版本控制.等用熟悉了,再看看怎么搞分支,合并,多人开发之类的. 1下载个git客户端,如Git for Windo ...

  4. 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join

    public class TestJoin { public static void main(String[] args) { Thread t1 = new Thread(new T1(), &q ...

  5. 高效的使用STL

    高效的使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍: 熟悉以下条款,高效的使用STL: 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要 ...

  6. 把多个JavaScript函数绑定到onload事件处理函数上

    为了让函数只在页面加载完毕后才得到执行,我们会把函数绑定到onload事件上: window.onload = userFunction 但如果有两个函数:firstFunction() 和 seco ...

  7. Android Fast ImageLoader

    前段时间写的Android平台开源项目:Fast ImageLoader,现在分享给大家 源码地址:https://github.com/cumtkangyi/Android-Fast-ImageLo ...

  8. ubuntu linux 使用常见问题

    Q:gedit不支持windows下的中文显示 A:http://wiki.ubuntu.org.cn/Gedit%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81 Q:bash ...

  9. Redis实践操作之—— keyspace notification(键空间通知)

    一.需求分析: 设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期Key有个监听,如何对过期Key进行一个回调处理? 如何使用 Redis 来实现定时任务? 二.序言: 本文所说的定时任务 ...

  10. 优秀c++开源项目集合

    本文会持续更新, 我希望通过这篇文章把我看到过的优秀开源项目记录下来, 有时间仔细阅读. cockroachdb 前googler开发的开源的spanner数据库: https://github.co ...