关闭

java 多线程①

标签: java多线程
117人阅读 评论(0) 收藏 举报
分类:

public class Actor extends Thread {
public void run(){
System.out.println(getName()+"是一个演员!");
int count=0;
while(true){
System.out.println(getName()+"登台演出:"+(++count));
if(count==50){
break;
}
if(count%10==0){
try {
Thread.sleep(1000);//延长一秒
} 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.run();
actor.start();

Thread actressThread=new Thread(new Actress(),"MS.Runnable");
actressThread.start();
}
}


class Actress implements Runnable{


public void run() {
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName()+"是一个演员!");
int count=0;
while(true){
System.out.println(Thread.currentThread().getName()+"登台演出:"+(++count));
if(count==50){
break;
}
if(count%10==0){
try {
Thread.sleep(1000);//延长一秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(Thread.currentThread().getName()+"的演出结束了");
}

}

Thread actressThread=new Thread(new Actress(),"MS.Runnable");

Runnable 接口只有一个run方法  , 实现Runnable接口创建的线程最终还是要通过将自身实例作为参数传递给Thread然后执行


System.out.println(Thread.currentThread().getName()+"登台演出:"+(++count));
Thread.currentThread() 得到的就是当前thread对象
运行结果:一部分
Mr.thread 是一个演员!
Mr.thread 登台演出:1
Mr.thread 登台演出:2
Mr.thread 登台演出:3
Mr.thread 登台演出:4
Mr.thread 登台演出:5
Mr.thread 登台演出:6
Mr.thread 登台演出:7
Mr.thread 登台演出:8
MS.Runnable是一个演员!
Mr.thread 登台演出:9
MS.Runnable登台演出:1
Mr.thread 登台演出:10
MS.Runnable登台演出:2
MS.Runnable登台演出:3
MS.Runnable登台演出:4
MS.Runnable登台演出:5
MS.Runnable登台演出:6
MS.Runnable登台演出:7
MS.Runnable登台演出:8
MS.Runnable登台演出:9
MS.Runnable登台演出:10
Mr.thread 登台演出:11
Mr.thread 登台演出:12
Mr.thread 登台演出:13
Mr.thread 登台演出:14
Mr.thread 登台演出:15
Mr.thread 登台演出:16
Mr.thread 登台演出:17
Mr.thread 登台演出:18
Mr.thread 登台演出:19
Mr.thread 登台演出:20
MS.Runnable登台演出:11
MS.Runnable登台演出:12
线程只要启动之后不让他等待,就会执行一次代码循环后结束。但其中的过程并不是连续的,代码中指令执行一个while循环后,会释放系统资源使得其他线程有机会竞争系统资源,倘若当前线程休眠(等待),就不会再对资源进行争用,自然也就不会执行下一个while了。而剩下的线程是活跃的,自然只能看到他们争用资源了。


然后  创建一个舞台类和军队类:


public class ArmyRunnable implements Runnable {
//volatile保证线程可以真确的读取其他线程写入的值
//可见性的问题所以要声明为volatile  ref.JMM ,happens-before原则
volatile boolean keepRunning=true;


//军队线程
//模拟作战双方的行为
public void run() {
  while (keepRunning){//从Stage中引入keepRunning的值
 
  //发动5连击
  for(int i=0;i<5;i++){
  System.out.println(Thread.currentThread().getName()+"进攻对方【"+i+"】");
//让出很处理器时间,下次谁进攻不一定
  Thread.yield();
  }
  }
           System.out.println(Thread.currentThread().getName()+"结束了战斗!"); 
}


}




public class Stage extends Thread {


/**
* 隋唐演义舞台
*/
public void run(){
//引入军队
ArmyRunnable armyTaskOfSuiDynasty=new ArmyRunnable();
ArmyRunnable armyTaskOfRevolt=new ArmyRunnable();
//创建线程
Thread armyOfSuiDynasty= new Thread(armyTaskOfSuiDynasty,"隋军");
Thread armyOfRevolt=new Thread(armyTaskOfRevolt,"龙鸣起义军");
//启动线程
armyOfSuiDynasty.start();//start()作用: 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
armyOfRevolt.start();
//舞台线程休眠  大家专心观看军队的厮杀
//为什么要让舞台线程休眠呢  :三个线程在运行如果不让舞台线程休眠 两个军队线程进攻一个五连击就会执行stage类的其他代码  
//让它休眠:两个军队就可以进攻500毫秒的时间 (Thread.sleep(500))再执行其他的代码 keepRunning就会变成false

try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
 armyTaskOfSuiDynasty.keepRunning=false;
armyTaskOfRevolt.keepRunning=false;

try {
armyOfRevolt.join();
} catch (InterruptedException e) {

                   e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
             new Stage().start();
}


}

0
0
查看评论

【多线程】应用Java多线程实例

前段时间,为了应对项目中后台处理时间过长而导致的页面等待问题,于是采用了多线程的解决方式。这里好好总结一下,主要从多线程的实现、有返回值的多线程以及如何在多线程中注入spring的bean等方面来介绍一下。 其实对多线程并不陌生,但是成系统的搞一下多线程这个是需要研究很多东西的。一般来说,像我,就...
  • huanjileaimeidan
  • huanjileaimeidan
  • 2016-12-21 17:09
  • 3212

java多线程的常见例子

本文有比较常见的java多线程问题的解决方法。对部分知识也有总结。
  • wenzhi20102321
  • wenzhi20102321
  • 2016-09-13 11:43
  • 19736

java中的多线程测试例子

在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。 对于直接继承Thread的类来说,代码大致框架是: ? 1 2 3 4 5 6 7 8 9 10 11 12 class 类名 ...
  • wuwei19841002
  • wuwei19841002
  • 2014-02-13 10:32
  • 4782

Java多线程看着一篇足够了!

引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实...
  • zhangliangzi
  • zhangliangzi
  • 2016-05-24 15:53
  • 10434

Java多线程下压缩文件demo

package net.liuyx.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Closeable; import java.io.File; impor...
  • lyx2007825
  • lyx2007825
  • 2012-05-30 23:37
  • 2852

Java多线程中的10个面试要点

Java技术栈 2016-10-30 16:04 1、进程与线程区别以及线程相关概念 进程就是运行中的程序,每个进程占用独自的内存空间;线程属于进程,一个进程可以有一个或多个线程,这些线程共享这个进程的内存或系统资源,线程的切换比进程切换的负担要小。一个Java应用总是从main()方法...
  • u011277123
  • u011277123
  • 2016-10-31 10:32
  • 1917

java 多线程模拟高访问量测试

本文模拟10个用户,持续访问Controller方法(适用SpringMVC框架项目,其他框架可借鉴)。 YourJunit为一个线程类,模拟每间隔随机秒数,有一个用户进行访问,到十个用户为止。也可修改for循环,模拟N个用户。 YourThreadTest为一个线程类,私有变量为Contro...
  • xiao_mengxi
  • xiao_mengxi
  • 2016-12-06 15:36
  • 2720

java多线程读写文件实例

Java多线程读文件: package com.myjava; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOExce...
  • vstar283551454
  • vstar283551454
  • 2013-12-16 22:39
  • 30605

java多线程的好处.1

首先需要理解线程是什么东西,说线程之前又必须知道进程的意思。进程:一个正在执行的程序,而每一个正在执行的程序中 都会有一定的执行顺序,该顺序叫执行路径,或者控制单元,又叫做线程,每个执行程序中至少有一个线程。进程和CPU之间的关系并不是同时进行,一个CPU一次只能执行一个进程,那为什么任务管理器中...
  • qq_31515611
  • qq_31515611
  • 2016-04-14 21:13
  • 2577

JAVA多线程——多线程的几种实现方法详解

转自:http://blog.csdn.net/jspamd/article/details/5262894 随着计算机技术的发展,编程模型也越来越复杂多样化。但多线程编程模型是目前计算机系统架构的最终模型。随着CPU主频的不断攀升,X86架构的硬件已经成为瓶,在这种架构的CPU主频最高为4G。事...
  • xuxiaoxie
  • xuxiaoxie
  • 2016-05-04 16:47
  • 2613
    个人资料
    • 访问:28278次
    • 积分:1300
    • 等级:
    • 排名:千里之外
    • 原创:80篇
    • 转载:41篇
    • 译文:13篇
    • 评论:0条
    最新评论