龟兔赛跑

public class RaceOfRT implements Runnable{
    private static String winner;

    //实现接口必须重写run方法,否则报错
    @Override
    public void run(){
        //赢家判定规则:先达到100米
        //整个跑步的过程
        for (int i = 0; i <=100 ; i++) {

            //兔子睡觉 在50步的时候休息10ms

            //字符串的比较需要用equals
            if(Thread.currentThread().getName().equals("兔子")&&i==50){
                try{
                    Thread.sleep(10);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
            }

            //获胜判定
            boolean flag = win(i);
            if(winner!=null)
            {
                //退出循环
                break;
            }

            //跑步的过程
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
        }
    }

    //判断是否有人获胜
    //上面的函数不能内置判断函数,因为单个函数描述的是一个线程,而结果需要在多个线程之间进行比较

    //对每个线程内部的i进行大小比较,如果某线程的i达到了100,则判定其胜出
    //由于每个线程都要比较,所以当一个达到100的时候,其他的线程应当停止循环
    public boolean win(int i ){
        if(i==100&&winner==null) {
            winner =Thread.currentThread().getName();
            System.out.println(Thread.currentThread().getName()+"获胜。");
            return true;
        }
        else return false;
    }

    public static void main(String[] args) {
        //将对象实例化
        RaceOfRT r=new RaceOfRT();

        //新建线程将会直接执行run函数
        new Thread(r,"兔子").start();
        new Thread(r,"乌龟").start();

    }
}

实现callable接口

  1. 接口后需要加入返回值类型
  2. 重写的方法为call,返回值自定义,需要体现在类定义处
  3. 创建执行服务
  4. 提交执行
  5. 获取结果
  6. 关闭服务
public class callableTest implements Callable<ELemType>{
	@Override
	public ElemType call()
	{
		return ElemType x;
	}
	
	public static void main(String[] args) {
		//创建对象
		/*此处每个线程都要创建一个对象,而runnable接口可以实现一个对象对应多个线程*/
		callableTest c1 = new callableTest();
		callableTest c2 = new callableTest();
		callableTest c3 = new callableTest();
		
		//创建执行服务
		ExecutorService s = Executors.newFixedThreadPool(3);
		
		//提交执行
		Future<ElemType> f1 = s.submit(c1);
		Future<ElemType> f2 = s.submit(c2);
		Future<ElemType> f3 = s.submit(c3);
		
		//获取结果
		ElemType e1 = f1.get();
		ElemType e2 = f2.get();
		ElemType e3 = f3.get();
		
		//...
		
		//关闭服务
		s.shutdownNow();
	}
}

好处

  1. 可以有返回值
  2. 可以抛出异常(在服务中利用自带的方法)
Posted on 2025-10-25 16:19  miloandmicah  阅读(5)  评论(0)    收藏  举报