자바 무료강의 2시간 완성을 시청하고 간략히 정리
여러 작업을 동시에 진행할 때 사용
class 클래스명 extends Thread{
public void run(){
// 명령문;
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
class MyThread extends Thread{
public void run() {
for(int i = 1; i < 5; i++){
System.out.println("Thread : "+i);
}
}
}
여러 작업을 동시에 진행할 때 사용
Interface
diff ) 자바는 class를 다중 상속할 수 없다. interface 를 상속 받으면 다른 클래스를 상속 받을 수 있다.
class 클래스명 implements Runnable{
public void run(){
// 명령문;
}
}
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
class MyRunnable implements Runnable{
public void run(){
for(int i = 1; i < 5; i++){
System.out.println("Runnable : "+i);
}
}
}
스레드 실행을 멈출 때까지 대기
public class Main {
public static void main(String[] args) throws InterruptedException {
// 예외 처리 위해 InterruptedException 추가
MyThread myThread = new MyThread();
myThread.start();
myThread.join(); // myThread 끝날때까지 대기
method();
}
public static void method() {
for(int i = 1; i < 5; i++){
System.out.println("method : "+i);
}
}
}
class MyThread extends Thread{
public void run() {
for(int i = 1; i < 5; i++){
System.out.println("Thread : "+i);
}
}
}
여러 스레드를 동시에 수행
public class Main {
public static void main(String[] args) throws InterruptedException {
MyThread myThread1 = new MyThread(1);
myThread1.start();
MyThread myThread2 = new MyThread(2);
myThread2.start();
}
}
class MyThread extends Thread{
private int seq; // 스레드 순번을 저장할 변수
public MyThread(int seq) {
this.seq = seq;
}
public void run() {
for(int i = 1; i < 5; i++){
System.out.println("Thread seq: " + seq + " - " + i);
}
}
}
여러 스레드가 공유된 자원에 동시에 접근하지 못하도록 막음
하나의 스레드가 synchronized를 수행하는 동안 다른 스레드는 사용할 수 없음
synchronized 메소드명(){
}
synchronized(변수){
// 변수에 대한 작업
// 어떤 스레드가 변수에 대한 작업을 하는 동안 다른 스레드는 사용 불가
}
public class Main {
public static void main(String[] args) throws InterruptedException {
SharedData sharedData = new SharedData();
Thread thread1 = new Thread(()->{
for (int i=0; i < 1000; i++){
sharedData.incremennt();
}
});
Thread thread2 = new Thread(()->{
for (int i=0; i < 1000; i++){
sharedData.incremennt();
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("SharedData : "+sharedData.data);
// 2000
}
}
class SharedData{
public int data = 0;
synchronized public void incremennt(){
data++;
}
}