이번 글은 내가 이해하기 위해 글을 올립니다.
공부하면서 이해하기 어려운 부분인 것 같습니다.
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()문으로 처리를 각각의 스레드들이 작업을 끝내고 동기화 시켜 출력해줍니다.
다양한 방법으로 스레드를 구현하는 연습이 필요합니다.
java Stream 자바 스트림 공부 정리 part02 (2) | 2021.08.25 |
---|---|
Java Stream 자바 스트림 공부 정리 (2) | 2021.08.24 |
java design pattern Adapter 자바 디자인 패턴 어댑터 (1) | 2021.08.22 |
자바 디자인 패턴 Singleton pattern ( 싱글톤) (7) | 2021.08.20 |
자바 람다식 ( java lambda expression ) 정리하기 part01 (2) | 2021.08.19 |
댓글 영역