[Day 12]公費0412-内容整理
🌞マルチスレッド
class Person {
String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
for(int i=1; i<=10; i++) {
System.out.println("Hello" + name + "! " + i);
}
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person("김유신");
Person p2 = new Person("홍길동");
p1.sayHello();
p2.sayHello();
}
}
<実行結果>Hello김유신! 1
Hello김유신! 2
Hello김유신! 3
Hello김유신! 4
Hello김유신! 5
Hello김유신! 6
Hello김유신! 7
Hello김유신! 8
Hello김유신! 9
Hello김유신! 10
Hello홍길동! 1
Hello홍길동! 2
Hello홍길동! 3
Hello홍길동! 4
Hello홍길동! 5
Hello홍길동! 6
Hello홍길동! 7
Hello홍길동! 8
Hello홍길동! 9
Hello홍길동! 10
🌞Javaでのマルチスレッドのプログラミング
Threadクラスを継承し、実行方法を公平に実行したい操作に書き換えます.
オブジェクトを作成し、公平に動作させることを起動スレッドと呼びます.
start()メソッドを呼び出し、できるだけ公平に作業します.
Runnableインタフェースを実装するクラスを作成し、runメソッドを多すぎて、公平にするためにいくつかのコマンドを書きます.
スレッドを開始するには、Threadオブジェクトとしてパッケージし、start()を呼び出す必要があります.
🌞インタフェースを使用する理由
class MyBall extends JPanel implements Runnable {
}
🌞スレッド優先度の設定
setPriority(int newPriority)
우선순위에 설정할 수 있는 값은 1~10
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
🌞paintComponent
🌞りんかいいき
🌞スレッド間通信
スレッドを起動すると、できるだけ公平に実行するように手配します.
公平とは限らない.
公平に動作する必要がある場合は、スレッド間で通信が必要です.
相手のテーマが終わるまで、私は「待っています」、「仕事が終わったら、待っている相手のテーマを起こします」.
待機スレッドと起動スレッド間の通信方法を使用します.
オブジェクトのwaitメソッドとnotifyメソッドを使用してスレッド間で通信します.
🌈wait()
🌈notify()
🌞例
🌟(マルチスレッド)例1🌟
//멀티쓰레드의 필요성
class Person {
String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
for(int i=1; i<=10; i++) {
System.out.println("Hello" + name + "! " + i);
}
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person("김유신");
Person p2 = new Person("홍길동");
p1.sayHello();
p2.sayHello();
}
}
🌟(マルチスレッド)例2🌟
class Person extends Thread {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println("Hello, " + name + " " + i);
try {
Thread.sleep(100); // 대기시간을 생성 , 컴퓨터를 0.1초 멈추도록 한다.
} catch (Exception e) {
}
}
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person("홍길동");
Person p2 = new Person("이순신");
// p1.run(); //일반메소드로 호출하여 p1이 끝나야만 p2를 실행함.
// p2.run();
p1.start(); //둘이 공평하게 실행할 수 있게 끔
p2.start();
}
}
🌟(JPanel)例2🌟
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
class RedBall extends JPanel {
@Override
protected void paintComponent(Graphics g) {
//빨간색으로 색상을 선택
g.setColor(Color.red);
//채운 원을 그리기.
g.fillOval(10, 220, 30, 30);
}
}
class MyFrame extends JFrame {
RedBall rb;
public MyFrame() {
rb = new RedBall();
add(rb);
setSize(400, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class RedBallTest {
public static void main(String[] args) {
new MyFrame();
}
}
🌞練習問題
👑練習問題1👑
import practice01.Count.CountDownEvent;
//pdf 01번문제 (쓰레드연습)
class Count extends Thread {
protected int count;
public Count(int count) {
this.count = count;
}
@Override
public void run() {
for (int i = count; i >=1; i--) {
System.out.println(i + "초 전입니다.");
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
System.out.println("발사 !!!");
}
class CountDownEvent extends Count {
private int time;
private String msg;
public CountDownEvent(int count, int time) {
super(count);
this.time = time;
}
@Override
public void run() {
for (int i = 1; i <= 20; i--) {
System.out.println(i + "초 전입니다.");
try {
Thread.sleep(100);
} catch (Exception e) {
System.out.println("대기시간이 지났습니다.");
}
}
}
}
}
public class ThreadPractice {
public static void main(String[] args) {
Count c = new Count(20);
// CountDownEvent c1 = new CountDownEvent(20, 30, )
c.start();
}
}
Reference
この問題について([Day 12]公費0412-内容整理), 我々は、より多くの情報をここで見つけました https://velog.io/@rlaehdus0417/Day-12-국비-0412-내용-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol