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();}}


0 0