Thread 공유자원,동기화_개념(Sychronized())

·2022년 11월 4일
0

JAVA객체지향_Thread

목록 보기
5/7

하나의 객체를 여러개의 스레드가 사용할 수도 있다.
하지만 스레드가 순차적으로 실행되는 것이 아니기 때문에 동기화 처리를 해야함
동기화 메소드 => sychronized()

동기화 처리 방법1
동기화할 객체에 synchronized 블록으로 묶기. synchronized(공유객체)
run()메소드 내용들을 묶어주면 됨

class AA extends Thread{
	
	@Override
    public void run(){
    	synchronized(){
        }
    }
class BB extends Thread{
	
	@Override
    public void run(){
    	synchronized(){
        }
    }    
public calss Test{
    	public static void main(String[]args){
        	Data data = new Data();
            for(int i=0;i<10;i++){
            	new AA(data).start();
                new BB(data).start();
            }
        }    

But 객체를 공유하기 위해서는 공유객체의 변수를 해당 클래스 내에 생성해야함
=>공유객체를 인자로 갖는 생성자를 만듦.
공유할 클래스 명 예시 =>Data

class AA extends Thread{
//공유객체
	Data data;
   //공유객체를 인자로 갖는 생성자
   public AA(Data data){
   	this.data=data;
   }
	@Override
   public void run(){
   	synchronized(data){
       }
   }
class BB extends Thread{
	Data data;
   public BB(Data data){
   	this.data=data;
   }
	@Override
   public void run(){
   	synchronized(data){
       }
   }  
public calss Test{
   	public static void main(String[]args){
       	Data data = new Data();
           for(int i=0;i<10;i++){
           	new AA(data).start();
               new BB(data).start();
           }
       }        
profile
웹개발입문자

0개의 댓글