Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package test;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- public class ThreadTest {
- public static void main(String[] args) {
- Share commonObj = new Share();
- Thread[] threads = ModuloIncrement.createThreads(commonObj, 2);
- for (Thread t : threads) {
- t.start();
- }
- for (Thread t : threads) {
- try {
- t.join();
- } catch (InterruptedException ex) {
- Logger.getLogger(ThreadTest.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- System.out.println("Exit Main Thread");
- }
- }
- class ModuloIncrement implements Runnable {
- private final Share share;
- private final int base, modulo;
- private ModuloIncrement(Share share, int base, int modulo) {
- this.share = share;
- this.base = base;
- this.modulo = modulo;
- }
- public void run() {
- print("start");
- synchronized (share) {
- while (true) {
- if (share.number >= share.max) {
- break;
- }
- if (share.number % base == modulo) {
- print(share.number + "");
- share.notifyAll();
- share.number++;
- } else {
- try {
- share.wait();
- } catch (InterruptedException ex) {
- Logger.getLogger(ModuloIncrement.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- }
- }
- print("end");
- }
- private void print(String msg) {
- System.out.println(this + ": " + msg);
- }
- public static Thread[] createThreads(Share share, int count) {
- Thread[] mit = new Thread[count];
- for (int i = 0; i < count; i++) {
- mit[i] = new Thread(new ModuloIncrement(share, count, i));
- }
- List<Thread> l = Arrays.asList(mit);
- Collections.shuffle(l);
- return l.toArray(mit);
- }
- @Override
- public String toString() {
- return "ModuloIncrement{" + "share=" + share + ", base=" + base + ", modulo=" + modulo + '}';
- }
- }
- class Share {
- volatile int number = 1;
- final int max = 50;
- @Override
- public String toString() {
- return "Share{" + "number=" + number + ", max=" + max + '}';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement