1. 程式人生 > >java生成隨機篩子

java生成隨機篩子

題目要求:

兩個執行緒,一個執行緒隨機生成篩子數,一個執行緒在控制檯中列印執行緒數,如果連續生成3個6,則兩個執行緒退出。

實現程式碼(一)

import java.util.LinkedList;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class DemoA {

    LinkedList<Integer> list = new LinkedList<>();
    AtomicInteger count = new AtomicInteger();

    class Thread1 implements Runnable {
        @Override
        public void run() {
            while (count.get() < 3) {
                synchronized (list) {
                    if(list.size()>0){
                        try {
                            list.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    Random random = new Random();
                    int i = random.nextInt(6) + 1;
                    list.push(i);
                    if(i==6){
                        int c=count.get()+1;
                        count.set(c);
                    }else {
                        count.set(0);
                    }

                }
            }
        }
    }

    class Thread2 implements Runnable {
        @Override
        public void run() {
            while (count.get() < 3) {
                synchronized (list) {
                    if (list.size() > 0) {
                        System.out.println(list.pop());
                    }else {
                        list.notify();
                    }
                }
            }
        }
    }

    public void start() {
        Thread thr1 = new Thread(new Thread1());
        thr1.start();

        Thread thr2 = new Thread(new Thread2());
        thr2.start();
    }

    public static void main(String[] args) {
        DemoA demoA = new DemoA();
        demoA.start();
    }
}

實現程式碼(二)

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 搖篩子,一個執行緒讀,一個執行緒在控制檯列印,如果連續出現3個6,則退出。
 */
public class BlockQueueTest {
    public static void main(String[] args) {
        BlockQueueTest blockQueueTest=new BlockQueueTest();
        blockQueueTest.start();
    }

    private void start(){
        Bus bus=new Bus();

        new Thread(bus::send).start();
        new Thread(bus::take).start();
    }

    class Bus{
        BlockingQueue<Integer> queue=new ArrayBlockingQueue<>(1);
        AtomicInteger integer=new AtomicInteger();

        private void send(){
            while (integer.get()<3){
                Random random=new Random();
                int i=random.nextInt(6)+1;
                try {
                    queue.put(i);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(i==6){
                    int c=integer.get()+1;
                    integer.set(c);
                }else {
                    integer.set(0);
                }
            }
        }

        private void take(){
            while (integer.get()<3||queue.size()!=0){
                try {
                    System.out.println(queue.take());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

相關推薦

java生成隨機篩子

題目要求: 兩個執行緒,一個執行緒隨機生成篩子數,一個執行緒在控制檯中列印執行緒數,如果連續生成3個6,則兩個執行緒退出。 實現程式碼(一) import java.util.LinkedList; import java.util.Random; import jav

java生成隨機漢字

base 標準 2個 throws eat 生成 == java開源類庫 stat 方法一: public static char getRandomChar() { return (char) (0x4e00 + (int) (Math.rando

Java生成隨機不反復推廣碼邀請碼

都是 主鍵 line googl popu net 可能 其它 數據 歡迎進入我的博客:blog.scarlettbai.com查看很多其它文章 近期接到一個需求。要批量生成推廣碼,首先我們知道推廣碼的特效有例如以下兩點: 1:不可反復 2

Java生成隨機字串和生成隨即類

有時候我們在測試的時候需要構建一些物件,每次測試都要構建很麻煩,所以我們可以構建一些類,並給類賦一些隨機值。 @Data @ToString class Person { private Integer id; private Integer age; pr

java生成隨機圖片

@RequestMapping(method = POST, value = "/getVerify", produces = JSON_UTF8, consumes = JSON_UTF8)public void getVerify(HttpServletRequest request, HttpServl

JAVA生成隨機驗證碼

一、生成隨機圖片的java工具類 package com.xh.commen; import java.awt.*; import java.awt.image.BufferedImage; public class ImageUtil { private

java生成隨機密碼(隨機長度,指定長度)方法總結

本文章給大家總結了在java中生成隨機密碼的幾種函式,一種是隨機長度密碼,另一種是使用者固定長度密碼,下面我來給各位介紹。 Java生成隨機長度密碼。 /** * 生成隨機密碼 * * @pa

java 生成隨機字符串

string abcdefg 生成隨機字符串 生成 stringbu buffer stat abc turn java中選擇相應的字段,生成固定長度的字符串 public static String getRandomString(int length) { // len

java生成隨機字串(A-Z0-9)

public static String getRandomChar(int length) { //生成隨機字串 char[] chr = {'0', '1

JAVA生成隨機ID(UUID)

生成隨機ID,經常在新增資料到資料庫中使用 public static String getUUID(){ UUID uuid=UUID.randomUUID();

java生成隨機驗證碼(ASCII)

最近做的一些東西,在做請求時,要偽造一些隨機碼,所以就寫了個方法,網上實現也比較多,這裡只是提供自己的這個相對來說比較簡單,主要是看實現思路,主要是利用java的 Random類 1. 只生成數字驗證碼 因為是用於驗證碼,所以首位為0也是可以的,單純的用random.nextIn

Java生成隨機驗證碼圖片並進行Base64編碼

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints;

Java生成隨機字串,必須包含數字、小寫字母、大寫字母

轉載,來源:http://www.cnblogs.com/dongliyang/archive/2013/04/01/2994554.html 一道演算法題,生成隨機字串,必須包含數字、小寫字母、大寫字母。 為了生成隨機數方便,特別編寫StdRandom類(注1),AP

Java生成隨機整數

Java生成隨機整數 呼叫import java.util.Random;包 宣告和建立: Random rd1=new Random(); int a=rd1.nextInt(); 或者呼叫import java.lang.Math.*;包來產生一個0---3之間的dou

Java生成隨機字串的程式碼

public static String getRandomString(int length) { //length表示生成字串的長度    String base = "abcdefghijklmnopqrstuvwxyz0123456789";       Ran

java生成隨機數字和字母組合

public static String getCharAndNumr(int length) {     String val = "";     Random random = new Random();     for (int i = 0; i < length

java隨機生成一個無序且長度不大於10的字符串

image ack con 技術 exti pen collect tint span package xiangmu; import java.util.ArrayList; import java.util.Collections; import java.ut

java如何隨機生成定長的字符串

時間 tle eof 長度 bcd pow val gnu 字符串 小數,字符串、時間等示例代碼 public class RandomTest { public static Random rand = new Random(); public stat

java 如何隨機生成(取出)一個數組中的一個數,並且一次取一個直到取

問題描述 我想得到的是特定數,可能不是連續的,而且 數是取出的。 程式碼 private static int[] randomCreate(int [] rands) { int[] outArr = new int[rands.length];//創造一個用於接收的陣列

Java 生成四位隨機驗證碼

驗證碼在平時用到的很多,簡單記錄一下生成四位隨機驗證碼的核心程式碼: 生成四位驗證碼(數字與字母混合) String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; StringBuilder sb=new StringBuilder(4);