Java多线程
编写一个Java程序,该程序将启动4个线程,其中3个是掷硬币线程,1个是主线程。每个掷硬币线程将连续掷出若干次硬币(10次以内,次数随机生成);主线程将打印出正面出现的总次数以及正面出现的概率。
(1)主线程
public class MainThread {
public static void main(String[] args) throws InterruptedException {
int m = 0; // 正面的次数
float p = 0; // 概率
System.out.println("Threads starting ....");
CoinTest coin = new CoinTest();
CoinTest coin1 = new CoinTest();
CoinTest coin2 = new CoinTest();
Thread t = new Thread(coin);
Thread t1 = new Thread(coin1);
Thread t2 = new Thread(coin2);
t.start();
t1.start();
t2.start();
//使用 t.jon()方法,就是当子线程执行结束后,在执行主线程
t.join();
t1.join();
t2.join();
m = m + coin.m + coin1.m + coin2.m;
p = (coin.p + coin1.p + coin2.p) / 3;
System.out.println("正面出现的总次数:" + m + "正面出现的总概率:" + p);
}
}
(2)抛硬币线程
public class CoinTest implements Runnable {
public int m = 0; // 正面的次数
public float p = 0; // 概率
public CoinTest() {
}
public CoinTest(int m,float p){
this.m = m;
this.p = p;
}
@Override
public void run() {
Random ran = new Random();
int n = (int) (Math.random()*9+1); // 随机生成投掷硬币的次数
m=0;
p=0;
for (int i = 0; i < n; i++) {
// 正面
if (ran.nextBoolean()) {
m++;
}
}
p = (float) ((10*m*0.1) / n);
DecimalFormat fnum = new DecimalFormat( "##0.00 ");
String pnew=fnum.format(p);
System.out.println("投掷硬币的次数:"+n+",CoinTest正面出现的次数:" + m + ",正面出现的概率:" + pnew);
}
}