线程的创建

线程的启动和停止

/**
* 演员类 继承Thread类
* @author Administrator
*
*/
public class Actor extends Thread {
//每个线程都有一个run方法 我们可以在run方法中来完成我们想要线程完成的任务
public void run(){
System.out.println(getName()+"是一个演员"); int count=0;
System.out.println(getName()+"登台演出"+(++count)); System.out.println(getName()+"演出结束");
}
public static void main(String[] args){
Thread actor = new Actor();//创建一个线程
actor.setName("程咬金");//设置线程名称
actor.start();//启动线程
}
}
package com.imooc;
/**
* 演员类 继承Thread类
* @author Administrator
*
*/
public class Actor extends Thread {
//每个线程都有一个run方法 我们可以在run方法中来完成我们想要线程完成的任务
public void run(){
System.out.println(getName()+"是一个演员"); int count=0;
boolean keepRunning = true;
//只要keepRunning不为false 那么线程将一直运行
while(keepRunning)
{
System.out.println(getName()+"登台演出"+(++count));
if(count == 100)
{
//当演出场次达到100次的时候 停止演出
keepRunning = false;
}
//每次出场演出的速度太快 我们可以让演员每演完10场的时候休息1秒
if(count%10 == 0){
try {
System.out.println("太累了,休息1秒");
Thread.sleep(1000);//这里是以毫秒计算的1000等于1秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} System.out.println(getName()+"演出结束");
}
public static void main(String[] args){
Thread actor = new Actor();//创建一个线程
actor.setName("Mr.Thread");//设置线程名称
actor.start();//启动线程 //创建一个新的线程 在构造方法中可以传入线程的名称
Thread actree = new Thread(new Actree(),"Mr.Runnable");
actree.start();
}
}
class Actree implements Runnable
{ @Override
public void run() {
//Runnable中没有getName() 方法 我们可以使用 Thread的currentThread()方法获得当前的线程
System.out.println(Thread.currentThread().getName()+"是一个演员"); int count=0;
boolean keepRunning = true;
//只要keepRunning不为false 那么线程将一直运行
while(keepRunning)
{
//
System.out.println(Thread.currentThread().getName()+"登台演出"+(++count));
if(count == 100)
{
//当演出场次达到100次的时候 停止演出
keepRunning = false;
}
//每次出场演出的速度太快 我们可以让演员每演完10场的时候休息1秒
if(count%10 == 0){
try {
System.out.println("太累了,休息1秒");
Thread.sleep(1000);//这里是以毫秒计算的1000等于1秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} System.out.println(Thread.currentThread().getName()+"演出结束");
} }

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

军队类

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

舞台类

/**
* 舞台类 也是一个线程
* @author Administrator
*
*/
public class Stage extends Thread {
public void run(){
Army armyTaskSuiJun = new Army();
Army armyTaskRevolt = new Army(); Thread armySuiJun = new Thread(armyTaskSuiJun,"隋军");
Thread armyRevolt = new Thread(armyTaskRevolt,"农民起义军"); armySuiJun.start();
armyRevolt.start(); //让舞台休眠50毫秒 可以让观众安静的观看演出
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} armyTaskSuiJun.keepRunning = false;
armyTaskRevolt.keepRunning = false; try {
armyRevolt.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public static void main(String[] args) {
new Stage().start();
} }

关键先生类

package com.imooc;
/**
* 关键先生
* @author Administrator
*
*/
public class KeyPersonThread extends Thread {
public void run(){
System.out.println(getName()+"出场");
for(int i=1;i<=10;i++){
System.out.println(getName()+"进攻隋军"+i+"次");
}
}
}

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

package com.imooc;
/**
* 舞台类 也是一个线程
* @author Administrator
*
*/
public class Stage extends Thread {
public void run(){
System.out.println("请观看隋唐演义");
try {
Thread.sleep(3000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
System.out.println("大幕徐徐拉开......");
try {
Thread.sleep(3000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
Army armyTaskSuiJun = new Army();
Army armyTaskRevolt = new Army(); Thread armySuiJun = new Thread(armyTaskSuiJun,"隋军");
Thread armyRevolt = new Thread(armyTaskRevolt,"农民起义军"); armySuiJun.start();
armyRevolt.start(); //让舞台休眠50毫秒 可以让观众安静的观看演出
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("正当双方激战甚酣,半路杀出个程咬金");
Thread mrCheng = new KeyPersonThread();
mrCheng.setName("程咬金 "); System.out.println("程咬金的理想就是结束战斗,使人民安居乐业");
//正确停止线程的方法 正确的停止线程的方法应该使用停止标志
armyTaskSuiJun.keepRunning = false;
armyTaskRevolt.keepRunning = false;
//stop是错误的 不应该出现我们的代码中 他会使得线程戛然而止 使得线程不能够正常的结束 甚至没有执行完循环 以及程序的清理工作
// armySuiJun.stop();
// armyRevolt.stop();
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mrCheng.start();
//join方法使其他线程等待mrCheng执行完在继续执行
try {
mrCheng.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println("战争结束,人民安居乐业"); }
public static void main(String[] args) {
new Stage().start();
} }

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. python基础篇(完整版)

    目录 计算机基础之编程和计算机组成 什么是编程语言 什么是编程 为什么要编程 编程语言的分类 机器语言(低级语言) 汇编语言 高级语言 计算机的五大组成 CPU(相当于人类的大脑) 多核CPU(多个大 ...

  2. Ubuntu Anaconda3 环境下安装caffe

    安装Python环境 本人环境为Anaconda3 ,可参照 https://blog.csdn.net/ctwy291314/article/details/86571198 完成安装Python2 ...

  3. 树——minimum-depth-of-binary-tree(二叉树的最小深度)

    问题: Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the s ...

  4. md5sum 计算和校验文件的md5值

    1. 命令功能 md5算法一般用于检查文件完整性, 2. 语法格式 md5sum  [option]  [file] 参数 参数说明 -b 以二进制模式读入文件 -t 以文本模式读入文件 -c 用来从 ...

  5. LightOJ 1289 LCM from 1 to n(位图标记+素数筛

    https://vjudge.net/contest/324284#problem/B 数学水题,其实就是想写下位图..和状压很像 题意:给n让求lcm(1,2,3,...,n),n<=1e8 ...

  6. Java实现代理服务器

    Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器 ...

  7. 从Excel粘到Word的图片只有下面一半

    把图片粘贴到WORD上为什么只显示最底下一部分? 出现此故障的原因,有可能是设置为固定值的文档行距小于图形的高度,从而导致插入的图形只显示出了一部分.所以要调整图片的段落格式中的行间距. 解决方法 选 ...

  8. 5.xml约束技术--------schema

    1.schema约束 (1)dtd语法:<!ELEMENT 元素名称 约束> (2)schema符合xml的语法,xml语句 (3)一个xml文件中只能有一个dtd,但是可以有多个sche ...

  9. Centos6安装mysql

    此处安装的是MariaDB,介绍如下: MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将My ...

  10. Java缓冲字符读取

    public class BufferedReaderDemo { public static void main(String[] args) throws IOException { // 创建流 ...