//编写两个线程,一个计算2~100000之间素数的个数,另一个计算100000~200000之间的素数个数 public class ZyDemo01 { static class Thread2 implements Runnable { private long start, end; public Thread2(long start, long end) { this.start = start; this.end = end; } static int PriNum(long num1, long num2) {//计算两数之间有几个素数 int n = 0; for (; num1 <= num2; num1++) { if (isPrimeNumber(num1)) n++; } return n; } static Boolean isPrimeNumber(long num) { //判断一个数是否为素数 if (num == 2) return true;//2特殊处理 if (num < 2 || num % 2 == 0) return false;//识别小于2的数和偶数 for (int i = 3; i <= Math.sqrt(num); i += 2) { if (num % i == 0) {//识别被奇数整除 return false; } } return true; } @Override public void run() { System.out.println(start + "到" + end + "之间有:" + PriNum(start, end) + "个素数"); } } public static void main(String[] args) { Thread thread1 = new Thread(new Thread2(2,100000)); Thread thread2 = new Thread(new Thread2(100000,200000)); thread1.start(); thread2.start(); } }
//模拟多线程并发问题,并解决(方式越多越好) //模拟两个人(两个线程),同时在桌子上拿豆子,考虑并发出错情况 public class ZyDemo02 { public static void main(String[] args) { final Table table = new Table(); Thread t1 = new Thread(){ public void run(){ while(true){ int bean = table.getBeans(); Thread.yield(); System.out.println(getName()+":"+bean); } } }; Thread t2 = new Thread(){ public void run(){ while(true){ int bean = table.getBeans(); Thread.yield(); System.out.println(getName()+":"+bean); } } }; t1.start(); t2.start(); } } class Table{ private int beans = 20; public int getBeans(){ if(beans==0){ throw new RuntimeException("没有豆子了!"); } Thread.yield(); return beans--; } }