/*** 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序)* 多线程两种实现方法:1.继承Thread类       2.实现Runnable接口*/
public class Main {public static void main(String[] args) {MyThread t1 = new MyThread();t1.start(); //启动线程System.out.println("main");System.out.println("finished.");MyRunnable ta = new MyRunnable();Thread t2 = new Thread(ta);t2.start();}
}class MyThread extends Thread{@Overridepublic void run() {for(int i=0;i<10;++i){System.out.println(new Date()+"-"+i);}}
}class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
    @Overridepublic void run() {for(int i=0;i<10;++i){System.out.println("MyRunnable"+"-"+i);}}
}

public class Main {public static void main(String[] args) {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()); //输出mainThread t1 = new Thread(new MyRunnable(),"fish7");
//        System.out.println(t1.getId());t1.setName("dining");System.out.println("t1线程是否活动?"+t1.isAlive());t1.start();System.out.println("t1线程是否活动?"+t1.isAlive());}
}class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
    @Overridepublic void run() {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()); //输出main
    }
}

public class Main {/*** Sleep方法原理:让当前线程进入休眠状态,让出当次执行的CPU时间,但是不释放监视器的所属权*/public static void main(String[] args) {Thread t1 = new Thread(new MyRunnable());t1.start();for(int i=0;i<10;++i){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);Thread.sleep(1000); //不丢失任何监视器的所属权} catch (InterruptedException ex) {ex.printStackTrace();}}}
}class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
    @Overridepublic void run() {for(int i=0;i<10;++i){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}

public class Main {/*** Join方法:等待当前线程执行终止,或指定的等待时间(毫秒,纳秒)*/public static void main(String[] args) {Thread t1 = new Thread(new MyRunnable());t1.start();for(int i=0;i<10;++i){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);if(i==5)t1.join(); //等待该线程结束Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
    @Overridepublic void run() {for(int i=0;i<10;++i){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}

public class Main {/*** interrup方法:只是设置了线程的中断状态为true,并没有真正地中断线程。*/public static void main(String[] args) {Thread t1 = new Thread(new MyRunnable());t1.start();for(int i=0;i<10;++i){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);if(i==5)t1.interrupt(); //中断线程,设置了一个中断标记(中断状态为true)Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}class MyRunnable implements Runnable{@Overridepublic void run() {int i = 0;while(!Thread.interrupted()){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);++i;Thread.sleep(1000); //如果中断标记为true,会抛出异常} catch (InterruptedException ex) {ex.printStackTrace();Thread.currentThread().interrupt();}}}
}

public class Main {/*** 自定义标记完成中断线程   *被中断的程序只能自己去中断,别人不得中断它。*/public static void main(String[] args) {MyRunnable my = new MyRunnable();Thread t1 = new Thread(my);t1.setPriority(Thread.MAX_PRIORITY); //设置线程的
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);t1.start(); for(int i=0;i<10;++i){try {System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);if(i==5){my.setFlag(false); //中断线程
                }Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}class MyRunnable implements Runnable{private boolean flag = true;public boolean isFlag(){return flag;}public void setFlag(boolean flag){this.flag = flag;}@Overridepublic void run() {int i = 0;while(flag){System.out.println(Thread.currentThread().getName()+"-"+i);i++;try {Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}

public class Main {/*** 守护线程:当程序中没有用户线程的时候所有守护线程都会自动终止!(守护用户线程)* setDaemon:将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java虚拟机退出。*            该方法必须在启动线程前调用。* yield:暂停当前正在执行的线程对象,并执行其他线程。*/public static void main(String[] args) { //主线程是用户线程MyRunnable my = new MyRunnable();Thread t1 = new Thread(my);t1.setDaemon(true); //设置线程为守护线程
        System.out.println(t1.isDaemon());t1.start(); for(int i=0;i<10;++i){System.out.println("main-"+i);if(i==5){Thread.yield(); //让出当次CPU的执行时间
            }try {Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}class MyRunnable implements Runnable{@Overridepublic void run() {for(int i=0;i<20;++i){System.out.println("MyRunnablei"+i);try {Thread.sleep(1000);} catch (InterruptedException ex) {ex.printStackTrace();}}}
}

转载于:https://www.cnblogs.com/fish7/p/4165446.html

JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程相关推荐

  1. 线程的控制(创建、等待、终止)、分离线程

    一.线程控制 1.线程:线程是资源调度的基本单位,线程是进程内部的一个执行流,在进程的地址空间内运行.在Linux 下没有真正意义上的线程,线程是用进程模拟的,又被称为轻量级进程. 2.由于同⼀一进程 ...

  2. c#: 线程状态和管理之线程的休眠、挂起和中断

    环境: window 10 .NetFramework 4.7 vs2019 16.4.5 一.线程的状态 线程的状态可以从枚举ThreadState中查看到: public enum ThreadS ...

  3. JVisualVM 中线程状态(运行/休眠/等待/驻留/监视)解析

    在java自带的工具JVirtualVM中线程有以下几种状态: 先说结论,各状态含义如下,后面有详细的demo测试验证: 运行(runnable):正在运行中的线程. 休眠(timed_waiting ...

  4. 并发编程之二:线程创建方法、运行原理、常见方法(sleep,join,interrupt,park,守护线程等)

    线程创建方法.运行原理.常见方法 线程的创建方法 继承Thread 实现Runnable FutureTask 线程的运行原理 栈与栈帧 线程运行情况 线程的上下文切换(Thread Context ...

  5. 额!Java中用户线程和守护线程区别这么大?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知, ...

  6. 操作系统(3)-线程的六大状态、基于代码实战的线程创建及六个常用方法

    一.进程和线程的简介 进程的概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 进程中所包含的一个或多个执行单元成为线程.进程还拥有一个私 ...

  7. JAVA守护线程 非守护线程

    笔记: 第一篇转载写的比较好,将守护线程同linux的守护进程概念进行了对比. 当非守护线程执行完jvm就退出,不管是否还有守护线程在执行.所以守护线程尽量不要执行逻辑代码,顶多执行一些可有可无的辅助 ...

  8. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

    1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...

  9. java中的守护线程

    在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...

最新文章

  1. Netty - ByteBuf
  2. android-sqlite小实例
  3. 利用STM32 的串口来发送和接收数据实验
  4. String类中toCharArray()方法的用法
  5. 常见计算机问题 内存篇
  6. Castle.ActiveRecord的ProxyFactory配置
  7. linux启动守护进程失败,Ubuntu Linux设置守护进程时出错的解决
  8. C# 2.0 除了泛型
  9. Oracle:ORA-01789: 查询块具有不正确的结果列数 分析原因和解决办法
  10. vue computed使用_vue computed正确使用方式
  11. 《Java8实战》笔记(11):CompletableFuture-组合式异步编程
  12. 【职业生涯】这样的开发人员每个团队都想要
  13. Fiddler Everywhere全平台抓包调试工具安装和使用(一)
  14. (90)FPGA仿真计数器激励
  15. xmos驱动_独家!XMOS发表最新Xcore.ai“跨界处理器”
  16. Portal: 强叔侃墙
  17. [7]2019-ICDM-Learning to Sample:an Active Learning Framework 论文笔记
  18. Linux设备模型初始化流程
  19. 南海区妇幼保健院HIS数据容灾备份系统项目
  20. Hive-获取本月的第一天,本月的最后一天,本月的天数

热门文章

  1. vue 循环 递归组件_Vue一个案例引发的递归组件的使用
  2. 网络品牌推广浅析网站标题该如何进行SEO优化?
  3. 网站页面内链如何布局才更有利于SEO?
  4. 1235813找规律第100个数_拓展提优 | 小学数学拓展提优专项训练第9讲:
  5. 某一列高度变化_高度近视,老了后会瞎吗?
  6. php设计模式简单代码,PHP设计模式(1)工厂模式
  7. Parcelable与Serializable接口的用法和区别
  8. android从放弃到精通 第一天 重拾项目开发
  9. yarn架构——本质上是在做解耦 将资源分配和应用程序状态监控两个功能职责分离为RM和AM...
  10. 插值搜索——本质和二分无异,是利用数据分布的规律来定查找点,其基本假设是数据分布均匀...