线程休眠(让线程休息一会再运行)
  public static void sleep(long millis)

在自定义线程类中添加该方法。

更改后,运行测试类,结果就是每执行完一轮,就休息1秒(这里设置的是休眠1秒),再进行一轮。

一轮:(如果测试类调用了3个线程,那么就是随机运行3次为一轮)

如:

  哈士奇:1,日期:Wed Oct 05 21:01:19 CST 2016
  短尾猫:1,日期:Wed Oct 05 21:01:19 CST 2016
  萨摩耶:1,日期:Wed Oct 05 21:01:19 CST 2016

休息1秒,继续:

  萨摩耶:2,日期:Wed Oct 05 21:01:20 CST 2016
  哈士奇:2,日期:Wed Oct 05 21:01:20 CST 2016
  短尾猫:2,日期:Wed Oct 05 21:01:20 CST 2016

 public class ThreadSleep extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x + ",日期:" + new Date());
// 睡眠
// 稍微休息1秒钟
try {
Thread.sleep(1000);//由于父类没有抛出异常,所以得try{}catch(){}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

线程加入
  public final void join():等待该线程终止。 这个方法是在测试类上添加的

也就是说,得等这个线程运行结束,别的线程才能运行

以下代码就是,哈士奇先数完0-99,萨摩耶和短尾猫才能运行。。。二哈真6

public class ThreadJoinDemo {
public static void main(String[] args) {
ThreadJoin tj1 = new ThreadJoin();
ThreadJoin tj2 = new ThreadJoin();
ThreadJoin tj3 = new ThreadJoin(); tj1.setName("哈士奇");
tj2.setName("萨摩耶");
tj3.setName("短尾猫"); tj1.start();
try {
tj1.join();//由于父类没有抛异常,所以得try{}catch(){}
} catch (InterruptedException e) {
e.printStackTrace();
} tj2.start();
tj3.start();
}
}

线程礼让
  public static void yield(); :暂停当前正在执行的线程对象,并执行其他线程。

让多个线程的执行更和谐,但是不能靠它保证全部的和谐(即是哈士奇运行一次,萨摩耶运行一次,短尾猫运行一次)。

这个方法不能完全保证,有可能哈士奇连续运行几次。二哈继续6。。

该方法在测试类中添加:

 public class ThreadYield extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
Thread.yield();
}
}
}

守护线程
  public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。

通俗易懂地说:守护线程是用来保护别的非守护线程的,如果其它非守护线程都停止了,守护线程自身也必须停止

(保护的人挂了,守护者也得挂,不过守护者得到消息再挂,所以受保护者挂了以后,守护者会继续执行几次再挂)

代码:

 //这个代码中,刘备一运行完毕,张飞关羽跟着再运行几次,就停止
public class ThreadDaemonDemo {
public static void main(String[] args) {
ThreadDaemon td1 = new ThreadDaemon();
ThreadDaemon td2 = new ThreadDaemon(); td1.setName("关羽");
td2.setName("张飞"); // 设置守护线程
td1.setDaemon(true);
td2.setDaemon(true); td1.start();
td2.start(); Thread.currentThread().setName("刘备");
for (int x = 0; x < 5; x++) {
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}

再来个配图:坦克大战

中断线程

public final void stop():让线程停止,过时了,但是还可以使用。

替代stop的:

public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。

自定义多线程类:

public class ThreadStop extends Thread {
@Override
public void run() {
System.out.println("开始执行:" + new Date()); // 休眠10秒钟
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// e.printStackTrace();
System.out.println("线程被终止了");
} System.out.println("结束执行:" + new Date());
}
}

测试类:

 public class ThreadStopDemo {
public static void main(String[] args) {
ThreadStop ts = new ThreadStop();
try {
Thread.sleep(3000);
// ts.stop(); //过了3秒后,关闭ThreadStop线程,
ts.interrupt(); //中断线程。 把线程的状态终止,并抛出一个InterruptedException
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public void interrupt():的执行结果:

    开始执行:Wed Oct 05 21:58:44 CST 2016
    线程被终止了
    结束执行:Wed Oct 05 21:58:47 CST 2016

java 22 - 7 多线程之控制线程的方法的更多相关文章

  1. java 22 - 12 多线程之解决线程安全问题的实现方式1

    从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备, ...

  2. java 22 - 13 多线程之解决线程安全问题的实现方式2

    上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ;  Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...

  3. [转载]C# 多线程、控制线程数提高循环输出效率

    C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...

  4. C# 多线程、控制线程数提高循环输出效率

    C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...

  5. 【Java 线程的深入研究1】Java 提供了三种创建线程的方法

    Java 提供了三种创建线程的方法: 通过实现 Runnable 接口: 通过继承 Thread 类本身: 通过 Callable 和 Future 创建线程. 1.通过实现 Runnable 接口来 ...

  6. java 22 - 5 多线程之获取和设置线程对象的名称

    如何获取线程对象的名称呢? public final String getName():获取线程的名称.如何设置线程对象的名称呢? public final void setName(String n ...

  7. Java基础教程——多线程:创建线程

    多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器&quo ...

  8. 程序员:java中直接或间接创建线程的方法总结

    在java开发中,经常会涉及多线程的编码,那么通过直接或间接创建线程的方法有哪些?现整理如下: 1.继承Thread类,重写run()方法 class Worker extends Thread { ...

  9. java 22 - 20 多线程之线程池

    程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互. 而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池. 线程池里的每一个线程代码结束后 ...

随机推荐

  1. CVE: 2014-6271、CVE: 2014-7169 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis

    目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 为了理解这个漏 ...

  2. java发送固定字节到C++接口

    需求:java工程需要发送一个socket消息到C++接口,C++接口中规定了若干个参数,并且每个参数的长度是固定的,起始位置也是固定的, C++那边是GB2312编码,java这边是UTF-8. 现 ...

  3. [outlook]打开以后就自动进入安全模式的解决方法。Outlook start in safe mode.

    给客户写了一个Outlook的add-in, 用现在时髦的话应该叫outlook的app. 这个add-in的作用就是把outlook中的email,直接上传到SharePoint中.想要代码的联系我 ...

  4. iOS学习路线

    这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选区.这个学习路线必须发布到首页候选 ...

  5. C 运算符优先级列表

  6. org.apache packages can't be resolved in Eclipse解决方案

    删除.m2仓库里面对应的jar包,重新Maven->update project

  7. C# sql语句拼接时 like情况的防sql注入的用法

    今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...

  8. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  9. 最新Sublime Text 2 激活 汉化

    0x00 Sublime Text 2 Sublime Text 2 是一个轻量.简洁.高效.跨平台的编辑器,一直在使用它,简直是coder的必备神器,自从使用它之后就深深爱上它了(/▽\=),可能因 ...

  10. EMC Documentum DQL整理(三)

    1.Get Content Size in folder SELECT SUM(r_full_content_size/1024.0) FROM dm_sysobject WHERE FOLDER(' ...