일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- array
- 클래스
- Swing
- 배열
- StringBuilder
- Dict
- SpringBoot
- docker
- 메소드
- GIT
- event
- AssertJ
- 객체
- 자바
- thread
- JS
- 파이썬
- 스프링부트
- Python
- SSL
- 프로그래머스스쿨
- class
- 자바스크립트
- Java
- join()
- 저장소
- synchronized
- c#
- JavaScript
- Docker Desktop
- Today
- Total
목록전체 글 (94)
정리노트

package q4; import java.awt.*; import javax.swing.*; import java.io.*; public class Q4 extends JFrame { int x, y, width, height; Q4() { setSize(500, 300); x = 50; y = 50; width = 400; height = 200; MyPanel p = new MyPanel(); add(p); Thread t = new Thread(p); t.start(); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public class MyPanel extends JPanel implements Runnable{ public voi..

package q3; import java.awt.*; import javax.swing.*; public class Q3 extends JFrame { class MyThread extends Thread { private JLabel label; int x, y; MyThread(String file, int x, int y) { this.x = x; this.y = y; label = new JLabel(); label.setIcon(new ImageIcon(file)); label.setBounds(x, y, 100, 100); add(label); } public void run() { while (x

Calendar 사용 1초마다 시간을 불러와서 label 변경 package q2; import javax.swing.*; import java.awt.*; import java.util.Calendar; public class Q2 extends JFrame { JLabel label; class MyThread extends Thread { public MyThread() { label = new JLabel("aaa"); label.setFont(new Font("Serif", Font.BOLD, 50)); label.setBounds(100, 50, 400, 50); add(label); } public void run() { for (;;) { try { Calendar now = Calenda..

생산자는 데이터를 생산하고 소비자는 데이터를 소비하도록 동작을 조정한다. 두 thread는 공유된 객체를 사용하는데 생산을 하지 않았는데 소비를 하려고 하거나 소비를 하지 않았는데 생산을 하려고 시도하면 안된다. 그래서 소비가 되었는지, 생산이 되었는지를 확인하기 위해 각 thread가 계속 동작상태가 된다면 엄청난 CPU낭비가 된다. 따라서, 동작을 잠시 멈추는 wait() 과 동작하도록 깨우는 notifyAll()을 사용한다. package producerConsumerTest; class Buffer { private int data; private boolean empty = true; public synchronized int get() { while(empty) { try { wait(); }..
같은 자원에 동시에 접근하여 섞이는 것을 방지하기 위하여 동기화를 한다. package synchroPrint; /*class Printer {// 동기화 블록 사용 void print(int arr[]) { synchronized(this) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } }*/ class Printer {// 동기화 메소드 사용 synchronized void print(int arr[]) { for (int i = 0; i < arr.length..

thread의 개수보다 작업의 개수가 더 많은 경우에는 작업은 FIFO Queue에서 대기한다. Runnabel 객체를 구현하고 ThreadPoolExecutor로 보내기만 하면 됨. (ThreadPoolExecutor 는 thread로 실행하는 담당) thread가 새로 생성되는 시간을 절약하며 ThreadPoolExecutor는 thread가 계속 생성되는 것을 방지하기 위하여 몇 개의 thread를 미리 생성한 후에 pooling하여 사용한다. package threadPoolTest; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class ThreadPoolTest imple..

하나의 스레드가 다른 스레드의 interrupt()를 호출하면 해당 스레드는 중지된다. 이는 InterruptedException 로 예외처리를 하면 된다. package threadControl; import javax.swing.*; import java.awt.*; public class ThreadControl extends JFrame { private JLabel label; Thread t; class Counter extends Thread { public void run() { for (int i = 1; i t.interrupt()); // 버튼이 눌리면 interrupt() 실행 // 람다 getContentPane().add(button); setVisible(true); setDe..