java 多线程01
来源:互联网 发布:淘宝二手收购 编辑:程序博客网 时间:2024/06/13 12:08
1.什么是进程与线程?
进程: 如:开发工具、QQ、。当你双击能运行的。包含线程。
线程: 是系统中最小的执行单元,一个进程 可以有多个线程。共享进程资源。
线程交互: 互斥 <-----> 同步。
2.线程:
继续 java lang 包 class Thread <-------> interface Runnable 都有一个Run()方法。
1. 创建线程:
1.Thread()
2.Thread(String name)
分配新的Thread
对象。
3.Thread(Runnable target)
分配新的Thread
对象。
4.Thread(Runnable target,String name)
分配新的Thread
对象。
2.线程方法:
0. void run()
如果该线程是使用独立的Runnable
运行对象构造的,则调用该Runnable
对象的 run
方法;否则,该方法不执行任何操作并返回。
1. void start()
使该线程开始执行--启动线程;
2.
static void sleep(long millis)------线程休眠(暂停执行),
static void
sleep(long millis, int nanos) ----线程休眠(暂停执行),
3.
a.void join()
b.void join(long millis) -------------等待当前线程终止。
c.void join(long millis,int nanos)
3.获取线程引用:
1.static thread
currentThread()
返回对当前正在执行的线程对象的引用。
4.
static void yield()
暂停当前正在执行的线程对象,并执行其他线程。
3.实例:
package cn.lanz.threadrunnable;public class Actor extends Thread {//重载run()public void run() {System.out.println(getName()+"是一个演员!");int count=0;boolean keepRunning=true;while(keepRunning){System.out.println(getName()+"登台演出:"+(++count));if(count==20){keepRunning=false;}//演出场次if(count%2==0){try {//休眠3秒Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}System.out.println(getName()+"的演出结束了");}}
package cn.lanz.threadrunnable;public class Actress implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"是一个演员!");int count=0;boolean keepRunning=true;while(keepRunning){System.out.println(Thread.currentThread().getName()+"登台演出:"+(++count));if(count==20){keepRunning=false;}//演出场次if(count%2==0){try {//休眠3秒Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}System.out.println(Thread.currentThread().getName()+"的演出结束了");}}
package cn.lanz.threadrunnable;public class ThreadRunnableTest {public static void main(String[] args) {Actor actor=new Actor();actor.setName("Mr.Thread");actor.start();Thread actressThread =new Thread(new Actress(),"Mr.Runnable");actressThread.start();}}
package cn.lanz.threadrunnable.army;/** * @描述: 军队线程 * @version 创建时间: 2016-12-7:下午3:18:31 * @E-mail 邮箱: * @author 作者: */public class AramyRunnable implements Runnable {//volatile保证 了线程可以正确的读取其他线程的写入值。volatile boolean keepRunning=true;@Overridepublic void run() {while(keepRunning){//发动3连击for(int i=0;i<3;i++){System.out.println(Thread.currentThread().getName()+":进攻对方["+i+"]次数");//暂停当前线程,并执行其他线程Thread.yield();}}System.out.println(Thread.currentThread().getName()+":结束战斗!");}}
package cn.lanz.threadrunnable.army;/** * @描述: 关键人物 * @version 创建时间: 2016-12-7:下午3:43:43 * @E-mail 邮箱: * @author 作者: */public class KeyPersonThread extends Thread{@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"开始了战斗!");//发起了【"+i+"】击for(int i=0;i<6;i++){System.out.println(Thread.currentThread().getName()+"左突右杀,攻击唐军");}System.out.println(Thread.currentThread().getName()+"战斗结束!");}}
package cn.lanz.threadrunnable.army;/** * @描述: 舞台 * @version 创建时间: 2016-12-7:下午3:30:43 * @E-mail 邮箱: @126.com * @author 作者: */public class Stage extends Thread {@Overridepublic void run() {AramyRunnable aramyTaskOfSuiDynasty=new AramyRunnable();AramyRunnable aramyTaskOfRevolt=new AramyRunnable();//使用Runnable创建线程Thread aramyOfSuiDynasty=new Thread(aramyTaskOfSuiDynasty,"清朝");Thread aramyOfRevolt=new Thread(aramyTaskOfRevolt, "唐朝");//启动线程aramyOfSuiDynasty.start();aramyOfRevolt.start();//休眠try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}aramyTaskOfSuiDynasty.keepRunning=false;//aramyTaskOfRevolt.keepRunning=false;//线程等待try {aramyOfRevolt.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("双方正在厮杀,中间杀出一个重要人物。");Thread mrCheng=new KeyPersonThread();mrCheng.setName("张三");//停止aramyTaskOfSuiDynasty.keepRunning=false;//aramyTaskOfRevolt.keepRunning=false;try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}mrCheng.start();try {mrCheng.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("战斗结束,人民安居乐业。");}public static void main(String[] args) {new Stage().start();}}
- java多线程01
- java多线程01
- Java基础--多线程01
- java多线程-01-基本概念
- java 多线程01
- 学习笔记 01 --- Java多线程
- Java 多线程学习笔记01
- java多线程自我理解01
- 【Java多线程】多线程死锁
- Java 多线程
- java 多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA 多线程
- Java多线程
- 线程级别单例模式
- 真是坑呀Xcode8 推送
- 如何解决分布式系统数据事务一致性问题
- HELLO WORLD
- 复制转发CSDN博客快捷方法
- java 多线程01
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- Java中时间类使用方法总结
- 英文的写作 —— 句子的积累
- RTMPdump源码分析: 发送消息(Message)(8)
- [jQuery知识]jQuery之知识体系
- git pull --rebase
- jdbc学习
- 1622-5 孔富晨 总结《2016年12月6日》 【连续第67天总结】