一些线程相关的问题

题目:

       8个运动员同时起跑,都到达终点后记录成绩

实现:

package com.spring.test;

import java.util.Random;
import java.util.concurrent.CountDownLatch;

/**
 * Created by brady on 15-3-1.
 */
public class CountDownLatchTest implements Runnable{
    private int id;
    private CountDownLatch beginSingnal;
    private CountDownLatch endSingnal;
    public CountDownLatchTest(int id ,CountDownLatch beginSingnal,CountDownLatch endSingnal){
        this.id = id;
        this.beginSingnal = beginSingnal;
        this.endSingnal = endSingnal;
    }
    @Override
    public void run(){
        try{
            beginSingnal.await();
            Random random = new Random();
            Thread.sleep(Math.abs(random.nextInt())%100);
            endSingnal.countDown();
            System.out.println("我到了:" + this.id);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
        CountDownLatch beginSingnal = new CountDownLatch(1);
        CountDownLatch endSingnal = new CountDownLatch(8);
        for(int i=1;i<=8;i++){
            new Thread(new CountDownLatchTest(i,beginSingnal,endSingnal)).start();
        }
        beginSingnal.countDown();
        try {
            endSingnal.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


两个线程循环打印

package com.spring.test;

/**
 * Created by brady on 15-3-13.
 */
/*
 * 两个线程循环打印
 */
public class WaitNotify {
    private static final Object a = new Object();
    private static boolean x1 = true;
    private static boolean y1 = false;

    private static final int x = 30;
    private static int y = 1;
    public static void main(String[] args){
        Thread t1 = new Thread(){
            public void run(){
                synchronized (a){
                    while (!x1) try {
                        a.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    while (y<x){
                        for(int i=0;i<3;i++){
                            System.out.println("线程一:" + y++);
                        }
                        x1=false;
                        y1=true;
                        a.notify();
                    }

                }
            }
        };
        Thread t2 = new Thread(){
            public void run(){
                synchronized (a){
                    while (!y1) try {
                        a.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    while (y<x){
                        for(int i=0;i<3;i++){
                            System.out.println("线程二:" + y++);
                        }
                        y1=false;
                        x1=true;
                        a.notify();
                    }

                }

            }
        };
        t1.start();
        t2.start();
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值