[Java] ThreadLocal

Java/Java 2013.08.21 11:29

링크 : http://javacan.tistory.com/entry/ThreadLocalUsage

 

저작자 표시 비영리 변경 금지
신고

'Java > Java' 카테고리의 다른 글

[Java] enum에 대해서  (0) 2013.12.24
[Java] Java Garbage Collection  (0) 2013.11.28
[Java] ThreadLocal  (0) 2013.08.21
[Java] JDBC SQL Server 연결 URL  (0) 2013.07.18
[Java] 윈도우 JDK 버전 확인  (0) 2013.05.10
[Java] jar 파일 실행 시키기  (0) 2013.04.07
posted by 뚱2

[.Net] Thread Pool

.Net/.Net 2013.06.19 13:50

링크 : http://msdn.microsoft.com/ko-kr/library/3dasc8as(v=vs.80).aspx 

 

 

using System;
using System.Threading;

public class Fibonacci
{
    public Fibonacci(int n, ManualResetEvent doneEvent)
    {
        _n = n;
        _doneEvent = doneEvent;
    }

    // Wrapper method for use with thread pool.
    public void ThreadPoolCallback(Object threadContext)
    {
        int threadIndex = (int)threadContext;
        Console.WriteLine("thread {0} started...", threadIndex);
        _fibOfN = Calculate(_n);
        Console.WriteLine("thread {0} result calculated...", threadIndex);
        _doneEvent.Set();
    }

    // Recursive method that calculates the Nth Fibonacci number.
    public int Calculate(int n)
    {
        if (n <= 1)
        {
            return n;
        }

        return Calculate(n - 1) + Calculate(n - 2);
    }

    public int N { get { return _n; } }
    private int _n;

    public int FibOfN { get { return _fibOfN; } }
    private int _fibOfN;

    private ManualResetEvent _doneEvent;
}

public class ThreadPoolExample
{
    static void Main()
    {
        const int FibonacciCalculations = 10;

        // One event is used for each Fibonacci object
        ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];
        Fibonacci[] fibArray = new Fibonacci[FibonacciCalculations];
        Random r = new Random();

        // Configure and launch threads using ThreadPool:
        Console.WriteLine("launching {0} tasks...", FibonacciCalculations);
        for (int i = 0; i < FibonacciCalculations; i++)
        {
            doneEvents[i] = new ManualResetEvent(false);
            Fibonacci f = new Fibonacci(r.Next(20,40), doneEvents[i]);
            fibArray[i] = f;
            ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i);
        }

        // Wait for all threads in pool to calculation...
        WaitHandle.WaitAll(doneEvents);
        Console.WriteLine("All calculations are complete.");

        // Display the results...
        for (int i= 0; i<FibonacciCalculations; i++)
        {
            Fibonacci f = fibArray[i];
            Console.WriteLine("Fibonacci({0}) = {1}", f.N, f.FibOfN);
        }
    }
}

 

저작자 표시 비영리 변경 금지
신고
posted by 뚱2
예)

if (m_hThread) { DWORD dwExitCode = 0; ::GetExitCodeThread(m_hThread, &dwExitCode); if (dwExitCode == STILL_ACTIVE) { AfxMessageBox(_T("실행중인 스레드")); } }


사실 GetExitCodeThread는 스레드 핸들을 인자로 해서 스레드 종료코드를 알아내는 함수이다.
그렇지만 스레드가 종료되기전 GetExitCodeThread를 호출하면 종료코드에 'STILL_ACTIVE'가
담겨져 있다 따라서 스레드가 실행중인지 확인 할 수 있다.
신고
posted by 뚱2