【无标题】

//编写两个线程,一个计算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--;
        }
    }


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值