By GokiSoft.com|
19:19 05/06/2024|
Java Advanced
[Share Code] Tìm hiểu về Thread trong Java - C2307L
Tóm tắt kiến thức:
- Tìm hiểu về Thread
- Tao Thread -> OK
- Thread running, stop
- Xac dinh cac Thread dang ton tai trong he thong -> Tai tung thoi diem
- Tìm hiểu về đa luồng
- Hàm trong xử lý Thread
- Join thread
Main ... .......
T1 ............
T2 ............
T3 ............
- sync function
t1, t2, t3, t4, ..., tn -> DataTest
- Đồng bộ thread (sync, wait, notify, notifyAll) -> Học buổi sau
-------------------------------------------------------------------------
Mở app -> process (tiến trình)
PC -> bất nhiều app -> nhiều tiến trình
Mỗi một ứng dụng / 1pid -> Tập hợp nhiều lệnh
Nếu máy tính 1CPU -> tài 1 thời điểm nó chỉ xử lý 1 lệnh
Chia sẻ CPU
p1, p2, ..., pn
CPU -> 1 triệu lệnh /1s
-> Xử lý đa tiến trình (Win, Ubuntu, )
Game (MOG):
- Nghe nhạc -> T1 -> Thread
- Chat -> T2 -> Thread
- Tải tài nguyên -> T3 -> Thread
- Nhân vật chuyển động -> T4 -> Thread
- Cài đặt cấu hình UI -> T5 -> Thread
...
-> Lập trình đa luồng
-> ???
#Test2.java
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package java2.lesson03;
/**
*
* @author diepvan
*/
public class Test2 {
public static void main(String[] args) {
DataTest dataTest = new DataTest();
// for (int i = 0; i < 10; i++) {
// dataTest.changeX(1);
// }
//
// for (int i = 0; i < 10; i++) {
// dataTest.changeX(-1);
// }
//
// System.out.println("End!!!");
CustomThread t1 = new CustomThread(dataTest);
CustomThread t2 = new CustomThread(dataTest);
t1.start();
t2.start();
}
static class DataTest {
int x;
public DataTest() {
x = 0;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
/**
* Dong bo thread -> T1, T2, T3 ..., Tn
* @param delta
*/
public synchronized void changeX(int delta) {
System.out.println("x = " + x + ", delta = " + delta);
x += delta;
System.out.println("x = " + x);
}
}
static class CustomThread extends Thread {
DataTest dataTest;
public CustomThread(DataTest dataTest) {
this.dataTest = dataTest;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
this.dataTest.changeX(1);
}
}
}
}
#Test.java
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package java2.lesson03;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author diepvan
*/
public class Test {
public static void main(String[] args) {
//Thread main
System.out.println("Start");//Main
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
//Tao thread 1
//Cach 1
Thread t = new Thread(() -> {
//Thread 1
for (int i = 0; i < 10; i++) {
System.out.println("T1 > " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
System.out.println("T1 stop");
});//Main
//start() -> Thread running
t.start();//Main, T1
try {
t.join();
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
//Cach 2
new Thread(new Runnable() {
@Override
public void run() {
//Thread 2
for (int i = 0; i < 10; i++) {
System.out.println("T2 > " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
System.out.println("T2 stop");
}
}).start();//Main, T1 (Co the ton tai, hoac stop), T2
//Cach 3
CThread t3 = new CThread();//Main, T1, T2
t3.start();//Main, T1, T2, T3
// t3.stop();
System.out.println("End");//Main (stop), T1, T2, T3
}
static class CThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("C > " + i);
}
System.out.println("C stop");
}
}
}
Tags: