상세 컨텐츠

본문 제목

JAVA Thread 자바 스레드 part01

Language/JAVA

by Computer_x86_64 2021. 8. 26. 20:28

본문

이번 글은 내가 이해하기 위해 글을 올립니다.

공부하면서 이해하기 어려운 부분인 것 같습니다.

 

synchronized는 

1. 메서드 전체에 임계 영역 지정하거나

     synchronized public static void run(){ ... }

2. 특졍 한 영역을 임계 영역으로 지정한다. 이때 들어갈 것은 참조변수여 합니다.

 

package ThreadPackage;

class Thread02 implements Runnable{
	
	public static int num = 0; 
	public static Object lock1 = new Object();  //임계영역을 담당할 참조변수
	
	@Override
	public void run() {
		for(int i=0; i < 100; i++) {
			synchronized(lock1) {
				num++;
			}
		}
	}
}
public class test12 {
	public static void main(String[] args) throws InterruptedException  {		
		Thread[] t10 = new Thread[10];
		for(int i=0; i <t10.length; i++) {
			t10[i] = new Thread(new Thread01());
			t10[i].start();
		}
		for(int j=0; j<t10.length; j++) {
			t10[j].join();
		}
		System.out.println(Thread01.num);
	}
}

 

전반적인 코드 설명.

main메서드 안에

Thread 배열 10개를 만듭니다.

Runnable을 구현한...Thread02를 Thread배열 에 i가 증가하면 하나씩 생성시킵니다.

그리고 실행합니다.

 

그리고 다시 for문을 통해 i가 증가하면 스레드의 작업을 하나씩 동기화 시킵니다.

그리고 출력하면 1000이 출력하게 됩니다.

 

맨 아래 t.join()메서드가 없으면 마지막에 이상한 값이 나오는 것처럼 보일수 있습니다.

 

그것은 스레드마다 각각의 처리완료후 출력문을 도달하는게 다르기 때문입니다.

 

그래서 Thread.join()문으로 처리를 각각의 스레드들이 작업을 끝내고 동기화 시켜 출력해줍니다.

 

다양한 방법으로 스레드를 구현하는 연습이 필요합니다.

 

관련글 더보기

댓글 영역