线程的创建

线程的启动和停止

  1. /**
  2. * 演员类 继承Thread类
  3. * @author Administrator
  4. *
  5. */
  6. public class Actor extends Thread {
  7. //每个线程都有一个run方法 我们可以在run方法中来完成我们想要线程完成的任务
  8. public void run(){
  9. System.out.println(getName()+"是一个演员");
  10.  
  11. int count=0;
  12. System.out.println(getName()+"登台演出"+(++count));
  13.  
  14. System.out.println(getName()+"演出结束");
  15. }
  16. public static void main(String[] args){
  17. Thread actor = new Actor();//创建一个线程
  18. actor.setName("程咬金");//设置线程名称
  19. actor.start();//启动线程
  20. }
  21. }
  1. package com.imooc;
  2. /**
  3. * 演员类 继承Thread类
  4. * @author Administrator
  5. *
  6. */
  7. public class Actor extends Thread {
  8. //每个线程都有一个run方法 我们可以在run方法中来完成我们想要线程完成的任务
  9. public void run(){
  10. System.out.println(getName()+"是一个演员");
  11.  
  12. int count=0;
  13. boolean keepRunning = true;
  14. //只要keepRunning不为false 那么线程将一直运行
  15. while(keepRunning)
  16. {
  17. System.out.println(getName()+"登台演出"+(++count));
  18. if(count == 100)
  19. {
  20. //当演出场次达到100次的时候 停止演出
  21. keepRunning = false;
  22. }
  23. //每次出场演出的速度太快 我们可以让演员每演完10场的时候休息1秒
  24. if(count%10 == 0){
  25. try {
  26. System.out.println("太累了,休息1秒");
  27. Thread.sleep(1000);//这里是以毫秒计算的1000等于1秒
  28. } catch (InterruptedException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34.  
  35. System.out.println(getName()+"演出结束");
  36. }
  37. public static void main(String[] args){
  38. Thread actor = new Actor();//创建一个线程
  39. actor.setName("Mr.Thread");//设置线程名称
  40. actor.start();//启动线程
  41.  
  42. //创建一个新的线程 在构造方法中可以传入线程的名称
  43. Thread actree = new Thread(new Actree(),"Mr.Runnable");
  44. actree.start();
  45. }
  46. }
  47. class Actree implements Runnable
  48. {
  49.  
  50. @Override
  51. public void run() {
  52. //Runnable中没有getName() 方法 我们可以使用 Thread的currentThread()方法获得当前的线程
  53. System.out.println(Thread.currentThread().getName()+"是一个演员");
  54.  
  55. int count=0;
  56. boolean keepRunning = true;
  57. //只要keepRunning不为false 那么线程将一直运行
  58. while(keepRunning)
  59. {
  60. //
  61. System.out.println(Thread.currentThread().getName()+"登台演出"+(++count));
  62. if(count == 100)
  63. {
  64. //当演出场次达到100次的时候 停止演出
  65. keepRunning = false;
  66. }
  67. //每次出场演出的速度太快 我们可以让演员每演完10场的时候休息1秒
  68. if(count%10 == 0){
  69. try {
  70. System.out.println("太累了,休息1秒");
  71. Thread.sleep(1000);//这里是以毫秒计算的1000等于1秒
  72. } catch (InterruptedException e) {
  73. // TODO Auto-generated catch block
  74. e.printStackTrace();
  75. }
  76. }
  77. }
  78.  
  79. System.out.println(Thread.currentThread().getName()+"演出结束");
  80. }
  81.  
  82. }

模拟两只军队在舞台上表演战斗

军队类

  1. public class Army implements Runnable {
  2. //volatile 是java的关键字 可见性 使得keepRunning可以接受外部线程的赋值
  3. volatile boolean keepRunning = true;
  4. @Override
  5. public void run() {
  6. while(keepRunning)
  7. {
  8. //让军队发起5连攻
  9. for(int i=0;i<5;i++){
  10. System.out.println(Thread.currentThread().getName()+"发起进攻【"+i+"】");
  11. Thread.yield();//yield()方法可以让线程让出处理器时间 和其他的线程共同争夺处理器资源
  12. }
  13.  
  14. }
  15. System.out.println(Thread.currentThread().getName()+"战斗结束");
  16. }
  17.  
  18. }

舞台类

  1. /**
  2. * 舞台类 也是一个线程
  3. * @author Administrator
  4. *
  5. */
  6. public class Stage extends Thread {
  7. public void run(){
  8. Army armyTaskSuiJun = new Army();
  9. Army armyTaskRevolt = new Army();
  10.  
  11. Thread armySuiJun = new Thread(armyTaskSuiJun,"隋军");
  12. Thread armyRevolt = new Thread(armyTaskRevolt,"农民起义军");
  13.  
  14. armySuiJun.start();
  15. armyRevolt.start();
  16.  
  17. //让舞台休眠50毫秒 可以让观众安静的观看演出
  18. try {
  19. Thread.sleep(50);
  20. } catch (InterruptedException e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. }
  24.  
  25. armyTaskSuiJun.keepRunning = false;
  26. armyTaskRevolt.keepRunning = false;
  27.  
  28. try {
  29. armyRevolt.join();
  30. } catch (InterruptedException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34.  
  35. }
  36. public static void main(String[] args) {
  37. new Stage().start();
  38. }
  39.  
  40. }

关键先生类

  1. package com.imooc;
  2. /**
  3. * 关键先生
  4. * @author Administrator
  5. *
  6. */
  7. public class KeyPersonThread extends Thread {
  8. public void run(){
  9. System.out.println(getName()+"出场");
  10. for(int i=1;i<=10;i++){
  11. System.out.println(getName()+"进攻隋军"+i+"次");
  12. }
  13. }
  14. }

舞台类  加入了关键先生代码

  1. package com.imooc;
  2. /**
  3. * 舞台类 也是一个线程
  4. * @author Administrator
  5. *
  6. */
  7. public class Stage extends Thread {
  8. public void run(){
  9. System.out.println("请观看隋唐演义");
  10. try {
  11. Thread.sleep(3000);
  12. } catch (InterruptedException e2) {
  13. // TODO Auto-generated catch block
  14. e2.printStackTrace();
  15. }
  16. System.out.println("大幕徐徐拉开......");
  17. try {
  18. Thread.sleep(3000);
  19. } catch (InterruptedException e2) {
  20. // TODO Auto-generated catch block
  21. e2.printStackTrace();
  22. }
  23. Army armyTaskSuiJun = new Army();
  24. Army armyTaskRevolt = new Army();
  25.  
  26. Thread armySuiJun = new Thread(armyTaskSuiJun,"隋军");
  27. Thread armyRevolt = new Thread(armyTaskRevolt,"农民起义军");
  28.  
  29. armySuiJun.start();
  30. armyRevolt.start();
  31.  
  32. //让舞台休眠50毫秒 可以让观众安静的观看演出
  33. try {
  34. Thread.sleep(50);
  35. } catch (InterruptedException e) {
  36. // TODO Auto-generated catch block
  37. e.printStackTrace();
  38. }
  39. System.out.println("正当双方激战甚酣,半路杀出个程咬金");
  40. Thread mrCheng = new KeyPersonThread();
  41. mrCheng.setName("程咬金 ");
  42.  
  43. System.out.println("程咬金的理想就是结束战斗,使人民安居乐业");
  44. //正确停止线程的方法 正确的停止线程的方法应该使用停止标志
  45. armyTaskSuiJun.keepRunning = false;
  46. armyTaskRevolt.keepRunning = false;
  47. //stop是错误的 不应该出现我们的代码中 他会使得线程戛然而止 使得线程不能够正常的结束 甚至没有执行完循环 以及程序的清理工作
  48. // armySuiJun.stop();
  49. // armyRevolt.stop();
  50. try {
  51. Thread.sleep(2000);
  52. } catch (InterruptedException e1) {
  53. // TODO Auto-generated catch block
  54. e1.printStackTrace();
  55. }
  56. mrCheng.start();
  57. //join方法使其他线程等待mrCheng执行完在继续执行
  58. try {
  59. mrCheng.join();
  60. } catch (InterruptedException e) {
  61. // TODO Auto-generated catch block
  62. e.printStackTrace();
  63. }
  64.  
  65. System.out.println("战争结束,人民安居乐业");
  66.  
  67. }
  68. public static void main(String[] args) {
  69. new Stage().start();
  70. }
  71.  
  72. }

JAVA线程初体验的更多相关文章

  1. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  2. java线程初写,陆续更新中。。

    (1)什么是线程?线程,是程序执行流的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享 ...

  3. Java集合初体验

    背景:        因为对Java的集合完全不了解,所以才在网上找了找能形成初步印象的文章进行学习,大多涉及的是一些概念和基础知识. 一.数组array和集合的区别: (1)数组是大小固定的,并且同 ...

  4. JAVA多线程-初体验

    一.线程和进程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 二.为什么使用多线程,哪些场景下使用 多线程的好处是提高程序 ...

  5. java学习初体验之课后习题

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //打印Hel ...

  6. Java单元测试初体验(JUnit4)

    什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ...

  7. java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  8. java学习初体验NO.1

    一.学习目标: 1.理解Java编译原理 在Java编程语言中,所以源代码首先以用.Java扩展名结尾的纯文本件编写,然后,编译器将这些源文件编译成.Class文件.然后,Java启动器工具使用Jav ...

  9. java程序初体验

    示例代码 class Demo { public static void main(String[] args) { System.out.print("hello world") ...

随机推荐

  1. 13-jQuery事件绑定和常用鼠标事件

    # 关于事件 ## 事件绑定 1.**基本绑定** > $(element).click(function(){})>> $(element).dblclick(function() ...

  2. 脚本_统计 Linux 进程相关数量信息

    #!bin/bash#作者:liusingbon#功能:统计 Linux 进程相关数量信息,running(运行的进程),sleeping(睡眠中的进程),stoped(停止的进程),zombie(僵 ...

  3. keras 下载预训练模型报错SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)

    import ssl ssl._create_default_https_context = ssl._create_unverified_context https://stackoverflow. ...

  4. [NOI2004]郁闷的出纳员(平衡树)

    [NOI2004]郁闷的出纳员 题目链接 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的 ...

  5. mycat权威指南阅读笔记--序言1

    前言 mycat官方地址http://www.mycat.io/,mycat是关系数据库的中间件,也就是说它可以把后端的多个数据库,抽象成一个关系数据库. mycat能干啥 官方文档介绍,主要是用来做 ...

  6. exec()和元类

    目录 一.exec()的作用 二.元类 2.1什么是元类,元类的作用是什么? 2.2自定义创建元类 一.exec()的作用 exec执行储存在字符串或文件中的 Python 语句,相比于 eval,e ...

  7. D0g3_Trash_Pwn_Writeup

    Trash Pwn 下载文件 1 首先使用checksec查看有什么保护 可以发现,有canary保护(Stack),堆栈不可执行(NX),地址随机化没有开启(PIE) 2 使用IDA打开看看 mai ...

  8. java.nio.channels.IllegalBlockingModeException

    报错信息如下: Exception in thread "main" java.nio.channels.IllegalBlockingModeException at java. ...

  9. 阿里云吴天议:云原生SDWAN 应用 构建智能化云原生SDWAN生态

    2019年11月16日 SDWAN 大会在北京正式召开.阿里云网络资深产品专家吴天议先生继阿里云网络研究员祝顺民先生发表了对云原生SDWAN的进化与展望之后(原文请见https://bit.ly/2K ...

  10. mysql中各种连接的区别

    现在有如下两个表: A表. B表. 一:使用笛卡尔连接 SELECT * FROM a,b 结果: 二:内连接 SELECT * FROM a INNER JOIN b on a.a_id=b.par ...