JAVA线程初体验

线程的创建
线程的启动和停止
/**
* 演员类 继承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线程初体验的更多相关文章
- JAVA 11初体验
		JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ... 
- java线程初写,陆续更新中。。
		(1)什么是线程?线程,是程序执行流的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享 ... 
- Java集合初体验
		背景: 因为对Java的集合完全不了解,所以才在网上找了找能形成初步印象的文章进行学习,大多涉及的是一些概念和基础知识. 一.数组array和集合的区别: (1)数组是大小固定的,并且同 ... 
- JAVA多线程-初体验
		一.线程和进程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 二.为什么使用多线程,哪些场景下使用 多线程的好处是提高程序 ... 
- java学习初体验之课后习题
		import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //打印Hel ... 
- Java单元测试初体验(JUnit4)
		什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ... 
- java activemq初体验
		1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ... 
- java学习初体验NO.1
		一.学习目标: 1.理解Java编译原理 在Java编程语言中,所以源代码首先以用.Java扩展名结尾的纯文本件编写,然后,编译器将这些源文件编译成.Class文件.然后,Java启动器工具使用Jav ... 
- java程序初体验
		示例代码 class Demo { public static void main(String[] args) { System.out.print("hello world") ... 
随机推荐
- mybatis对java自定义注解的使用
			转自:https://www.cnblogs.com/sonofelice/p/4980161.html 最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的mybati ... 
- python Opencv图像基础操作
			读取并显示图像 如果读取图像首先要导入OpenCV包,方法为: import cv2 读取并显示图像 img = cv2.imread("C:\test1.jpg") OpenCV ... 
- 【vue】父子组件间通信----传函数
			(一)子组件 调用 父组件 方法 方式一) 子组件中通过this.$parent.event来调用父组件的方法 父组件 <template> <div> <child&g ... 
- (转)nginx+redis实现接入层高性能缓存技术
			转自:https://blog.csdn.net/phil_code/article/details/79154271 1. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性 ... 
- 【LeetCode】动态规划(下篇共39题)
			[600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offe ... 
- Linux 性能测试工具 sysbench 的安装与简单使用
			文章目录 Linux 性能测试工具 sysbench 的安装与简单使用 一 背景 二 实验环境 2.1 操作系统 2.2 其他配 ... 
- CF9D How many trees? (dp)
			这题我想了好久 设 \(f_{i,j}\) 为 \(i\) 结点 \(<=j\) 的方案数 固定根,枚举左右子树,就有: \[f_{i,j}=\sum_{k=0}^{n-1}f_{k,j-1}* ... 
- django之配置文件setting.py
			一:配置文件setting.py中的简单配置更改 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 简单解释 ... 
- python语句执行
			python文件中的语句,按顺序执行,执行import时,原文件会入栈,等import文件执行完成后,才会出栈执行. load/const.py --- import os DB_ADDRESS = ... 
- mac上如何搜索文件?
			在Mac上如果你用会了搜索功能那绝对是个事半功倍的技巧.因为Mac本身有强大的文件索引能力, 可以帮你快速的找到你需要的文件.就好比我要找到上周修改过的word文档应该怎么办? * 使用语音命令让Si ... 
