본문 바로가기
자바

자바 소스코드: 스레드 충돌 예제

by 드린 2016. 11. 14.

목차

    반응형
    package javaapplication28;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    
    //공유 데이터인 집계판을 시뮬레이션하는 클래스
    //두 WorkerThread 스레드에 의해 동시 접근함
    class SyncObject{
        int sum=0;//집계판의 합
        //synchronized 삭제 하였을 때
            void add(){
            int n=sum;
            Thread.yield();
            n+=10;//10을 증가시킨다.
            sum=n;//증가한 값을 누적 시킨다.
            System.out.println(Thread.currentThread().getName()+":"+sum);
        }
        int getSum(){return sum;}
    }    
    //학생을 시뮬레이션 하는 스레드 클래스
    class WorkerThread extends Thread{
        SyncObject sObj;//집계판의 주소
        WorkerThread(String name, SyncObject sObj){
            super(name);
            this.sObj=sObj;
        }
        //집계판을 반복적으로 10번 접근하여 카운팅한다.
        public void run(){
            int i=0;
            while(i<10){
                sObj.add();
                i++;
            }
        }
    }
    
    public class JavaApplication28 {
        public static void main(String[] args) {
            SyncObject obj = new SyncObject();//집계판 공유 데이터 생성
            
            //스레드 생성시 집계판의 주소를 알려준다. 두스레드는 집계판에 동시에 접근한다.
            Thread th1=new WorkerThread("kitae",obj);
            Thread th2=new WorkerThread("hyosoo",obj);
            
            //두 스레드를 실행시킨다.
            th1.start();
            th2.start();
        }
    }
    
    

    <결과>

    2016/11/14 - [자바] - 자바 소스코드: 스레드 충돌 방지 예제

    2016/11/14 - [자바] - 자바 소스코드: ThreadFinishingFlag 예제(Java 무한 생산)

    2016/11/14 - [자바] - 자바 소스코드: 스레드 호출순서 정하기 예제

    #자바 #자바 소스코드 #스레드 충돌 예제 #실습 예제

    반응형