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") ...
随机推荐
- python 中PIL.Image和OpenCV图像格式相互转换
PIL.Image转换成OpenCV格式: import cv2 from PIL import Image import numpy image = Image.open("plane ...
- css文档之盒模型阅读笔记
前段时间抽空仔细阅读了w3c的css文档关于盒模型方面的一些基础知识.边读边记录了一些要点,在此做些整理,与大家分享,如有理解有误之处,请不吝指教. 1.综述 文档中的每个元素被描绘为矩形盒子.渲染引 ...
- 2018-8-10-C#-ValueTuple-原理
title author date CreateTime categories C# ValueTuple 原理 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 ...
- Rsync+sersync 数据同步指南
(1):sersync 可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或 某一个目录的名字: (2):rsync 在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变 ...
- Maven生成可以直接运行的jar包的多种方式(转)
转自:https://blog.csdn.net/xiao__gui/article/details/47341385 Maven可以使用mvn package指令对项目进行打包,如果使用java - ...
- selenium下拉菜单
from selenium.webdriver.support.select import Selectdef select_value(self, css, value): ''' 选中 ...
- Solr从数据库导入数据(DIH)
一. 数据导入(DataImportHandler-DIH) DIH 是solr 提供的一种针对数据库.xml/HTTP.富文本对象导入到solr 索引库的工具包.这里只针对数据库做介绍. A.准备以 ...
- Python---基础-小游戏用户猜数字2
一.使用int()将小数转换成整数,结果是向上取数还是向下取数 int(3,4) print(int(3,4)) ####写一个程序,判断给定年份是否为闰年 - 闰年的定义,能够被4整除的年份就叫闰年 ...
- Github熟悉一
Code/代码 Commits/提交 Issues/问题 Packages/包装 Marketplace/市场 Topics/话题 Wikis/维基百科 Users/用户 Pull requests/ ...
- java Main方法 获取 maven 的resource 下的xml文件
Properties properties = new Properties(); File file = new File("src/main/resources/generator.xm ...