http://en.wikipedia.org/wiki/Leibniz_formula_for_pi

bu formülü uygulayarak PI sayısını hesapladım. Fakat multithreading ile paralel 20 thread e bölerek hesaplamamı istediler benden ama işin içinden çıkamadım.

Bir hesaplama işlemini threadler ile iş parçalarına ayırıp sonra nasıl geri toplayacağım yapamadım açıkçası?

Yani bir hesap var elimde ben bunu 20 thread e bölüp sonra bunlardan ortak sonuç nasıl çıkartabilirim?

soruldu: 20 May '12, 21:07

dnn's gravatar image

dnn
16114
cevap kabul oranı: 0%

değiştirildi: 21 May '12, 03:59

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

iyi çalışmalar süperkodcu :)

(22 May '12, 01:38) UsTa UsTa's gravatar image

BlockingDeque kullanarak, birden fazla threadin bu listeye veri eklemesini, birden fazla threadin bu listeden veri okumasini saglayarak bir isi parcalarina bölebilirsin. Asagidaki örnekte birden fazla thread loglamak istedikleri degeri ThreadedLogger tarafindan tutulan BlockingDeque icine yerlestiriyorlar. ThreadedLogger bünyesindeki bir thread ise bu degerleri BlockingDeque icinden cekerek, ekranda görüntülüyor.

package com.kurumsaljava.kata.threadlogger;

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main
{
    private static final int    MIN_VALUE   = 1000;
    private static final int    MAX_VALUE   = 5000;

    public static void main(String[] args)
    {
        ThreadedLogger logger= ThreadedLogger.instance();
        ExecutorService service= Executors.newCachedThreadPool();
        service.execute(new ThreadToLog(logger));
        service.execute(new ThreadToLog(logger));
        service.execute(new ThreadToLog(logger));
        service.execute(new ThreadToLog(logger));
        service.execute(new ThreadToLog(logger));
        service.execute(new ThreadToLog(logger));

    }

    private static class ThreadToLog implements Runnable
    {
        private ThreadedLogger  logger;

        public ThreadToLog(ThreadedLogger logger)
        {
            this.logger= logger;
        }

        @Override
        public void run()
        {
            int counter= 0;
            while (true)
            {

                counter++;
                Random random= new Random();
                int myRandomNumber= random.nextInt(MAX_VALUE - MIN_VALUE) + MIN_VALUE;
                try
                {
                    // System.out.println(Thread.currentThread().getName() +
                    // " schreibt:  " + myRandomNumber);
                    logger.log(Thread.currentThread().getName() + " - " + myRandomNumber);
                    Thread.sleep(myRandomNumber);
                    System.out.println(Thread.currentThread().getName() + " counter:  " + counter);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
                if (counter == 10)
                    break;
            }
        }
    }
}

package com.kurumsaljava.kata.threadlogger;

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

class ThreadedLogger extends Thread
{

    private int                     size    = 0;
    private BlockingDeque<String>   queue   = new LinkedBlockingDeque<String>();
    public static ThreadedLogger    logger  = new ThreadedLogger();

    ThreadedLogger()
    {
        start();
    }

    public static final ThreadedLogger instance()
    {
        return logger;
    }

    protected int getQueueSize()
    {
        return queue.size();

    }

    public void log(String msg)
    {
        try
        {
            queue.put(msg);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

    }

    public String take()
    {
        String result= null;
        try
        {
            result= queue.takeFirst();
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        return (result != null) ? result : "";
    }

    @Override
    public void run()
    {
        String item= null;
        while (!(item= take()).equals("SHUTDOWN"))
        {
            System.out.println(">> logging >>>>>>>>>>>>>> " + item);

        }
    }
}

package com.kurumsaljava.kata.threadlogger;

import org.junit.Assert;
import org.junit.Test;

public class ThreadLoggerTest
{
    private static final String THIS_IS_A_TEST_STRING_LOG2  = "This is a test String log2";
    private static final String THIS_IS_A_TEST_STRING_LOG   = "This is a test String log";
    private ThreadedLogger      logger                      = new ThreadedLogger();

    @Test
    public void whenPuttingOneLogToTheQueue_onlyOneLogShouldBeExistingInTheQueue() throws Exception
    {
        log(THIS_IS_A_TEST_STRING_LOG);
        Assert.assertTrue(logger.getQueueSize() == 1);
    }

    @Test
    public void whenPuttingTwoLogToTheQueue_twoLogShouldBeExistingInTheQueue() throws Exception
    {
        log(THIS_IS_A_TEST_STRING_LOG);
        log(THIS_IS_A_TEST_STRING_LOG2);
        Assert.assertTrue(logger.getQueueSize() == 2);
    }

    @Test
    public void whenPuttingTwoLogToTheQueue_theFirstOneShouldBeTakenFromQueueFirst() throws Exception
    {
        log(THIS_IS_A_TEST_STRING_LOG);
        log(THIS_IS_A_TEST_STRING_LOG2);
        Assert.assertTrue(logger.take().equals(THIS_IS_A_TEST_STRING_LOG));
        Assert.assertTrue(logger.getQueueSize() == 1);

    }

    private void log(String msg)
    {
        logger.log(msg);
    }
}

EOF (End Of Fun)

Özcan Acar

permanent link

cevaplandı: 22 May '12, 03:41

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183
cevap kabul oranı: 52%

Teşekkür ederim

(24 May '12, 04:13) dnn dnn's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×3

Soruldu: 20 May '12, 21:07

Görüntüleme: 1,047 kez

Son güncelleme: 24 May '12, 04:17

powered by BitNami OSQA