java 多线程01


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 block
					e.printStackTrace();
				}
			}
		}
		
		
		System.out.println(getName()+"的演出结束了");
	}

}

package cn.lanz.threadrunnable;

public class Actress implements Runnable {

	@Override
	public 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 block
					e.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;
	@Override
	public 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{

	@Override
	public 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 {
	
	@Override
	public 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 block
			e.printStackTrace();
		}
		
		aramyTaskOfSuiDynasty.keepRunning=false;//
		aramyTaskOfRevolt.keepRunning=false;
		
		//线程等待
		try {
			aramyOfRevolt.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.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 block
			e.printStackTrace();
		}
		
		mrCheng.start();
		
		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();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值