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:



Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó