IMG-LOGO
×

Tài Liệu Học

Khoá học lập trình Java Core nâng cao

Exception & Collection

[Video] Tìm hiểu exception + debug + package - lập trình Java Nâng Cao [Video] Tìm hiểu collections, Sets, Maps và Generic - lập trình java nâng cao [Video] Chương trình quản lý sinh viên bằng HashMap - Java Advanced

File

[Video] Hướng dẫn đọc ghi file FileInputStream, FileOutputStream, ObjectInputStream trong java - lập trình java nâng cao [Video] Bài tập quản lý sách & lưu thông tin trên Files [Video] File - Quản lý thông tin sinh viên [Video] Quản lý thông tin sinh & lưu object file - Java nâng cao [Video] Viết ứng dụng WinRar | WinZip | 7Zip bằng Java - Nén file Java & giải nén file Java - Khoá học Java [Video] Bài tập quản lý bán vé máy bay - java nâng cao

Thread

[Video] Phân tích quản lý ứng dụng trong HĐH (Window, Mac, Linux)-Phân tích Game đa luồng Java [Video] Tìm hiểu Thread - Đồng bộ Thread - lập trình java nâng cao - Bổ sung thêm lớp học mới. [Video] Giải thích synchronized + Lap trinh Java nang cao [Video] Thread thực hiện in ngẫu nhiên các số nguyên và ký tự - Phần 1 [Video] Thread thực hiện in ngẫu nhiên các số nguyên và ký tự & Đông bộ thread + wait notify + synchronized + Java nâng cao - Phần 2 [Video] Synchronized 2 Thread - Bài tập mảng tên + địa chỉ - Java nâng cao [Video] Bài tập ôn luyện tổng hợp File, OOP, Thread trong java [Video] Sử dụng MultiThreading sinh ký tự a-zA-Z trong java

CSDL

[Video] Kết nối MySQL trong java swing JDBC trong java - lập trình java nâng cao [Video] Kết nối CSDL bằng java swing phần 1 - lập trình java nâng cao [Video] Kết nối CSDL bằng java swing phần 2 - lập trình java nâng cao [Video] Chương trình quản lý thư viện Java + XML Java + CSDL Java- SQL Java [Video] Phần mềm quản lý sinh viên MySQL + Java - Chương trình quản lý sinh viên MySQL + Java - Lập Trình Java [Video] Bài Tập Quản Lý Sinh Viên - CSDL - Java Swing [Video] Chương trình quản lý sản phẩm - quản lý tin tức - quản lý bán hàng - Lập trình Java [Video] Chức năng register & login + CSDL - Lập trình Java nâng cao - Phần 1 [Video] Hướng dẫn sử dụng Persistence Java - Kết nối database Java - MySQL Java nâng cao

Design Pattern & Đa Ngôn Ngữ

[Video] Design Pattern lập trình java nâng cao - lập trình java nâng cao

XML & JSON & CSDL

[Video] C1 > Chương trình quản lý sinh viên Java + Import/Export JSON + File - Lập Trình Java [Video] C2 > Chương trình quản lý sinh viên Java + Import/Export JSON + File - Lập Trình Java

Ôn Tập Tổng Quát & Exmination

[Video] Bài tập - Chường trình quản lý sở thú - Lập trình Java - Lập trình Java nâng cao - Phần 1 [Video] Bài tập - Chường trình quản lý sở thú - Lập trình Java - Lập trình Java nâng cao - Phần 2




Trang Chủ Java Advanced Sử dụng MultiThreading sinh ký tự a-zA-Z trong java

Sử dụng MultiThreading sinh ký tự a-zA-Z trong java

by GokiSoft.com - 10:02 14/09/2021 12,296 Lượt Xem

Viết chương trình thực hiện yêu cầu sau

- Thread 1 thực hiện sinh ngẫu nhiên các ký tự a-z, cứ 2s thì sinh 1 lần

- Thread 2 thực hiện biến các ký tự thường được sinh ra từ Thread 1 thành ký tự hoa, cứ sau 1s thì thực hiện 1 lần.

Yêu cầu đồng bộ 2 Thread (wait, notify)

- Nếu tổng thời gian xử lý của 2 Thread là 20s thì dựng 2 thread lại.

Bình luận



Chia sẻ từ lớp học

Hieu Ngo [community,C2009G]

Ngày viết: 13:04 14/09/2021


#Main.java


public class Main {
    public static void main(String[] args) {
        ThreadOne t1 = new ThreadOne();
        ThreadTwo t2 = new ThreadTwo();

        t1.start();
        t2.start();

    }
}


#ShareData.java


public class ShareData {

    public static final int THREAD_1 = 1;
    public static final int THREAD_2 = 2;

    int currentThread = THREAD_1;
    int rad;
    int  time;

    private static ShareData instance = null;

    public synchronized static ShareData getInstance() {
        if(instance == null) {
            instance = new ShareData();
        }
        return instance;
    }
    public ShareData() {
        time = 0;
    }

    public int getRad() {
        return rad;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    public int getCurrentThread() {
        return currentThread;
    }

    public void setCurrentThread(int currentThread) {
        this.currentThread = currentThread;
    }

    public void setRad(int rad) {
        this.rad = rad;
    }
    public synchronized  void plus(int value) {
         time += value;
    }
    public synchronized boolean isALive() {
        return time < 20;
    }
}


#ThreadOne.java


import java.util.Random;

public class ThreadOne extends Thread {
    ShareData shareData;

    public ThreadOne() {
        this.shareData = ShareData.getInstance();
    }



    @Override
    public void run() {
        Random random = new Random();

        while(shareData.isALive()) {
            try {
                Thread.sleep(2000);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (shareData) {
                int a = 97 + random.nextInt(26);
                char c = (char) a;
                shareData.setRad(a);
                System.out.println("Char: "+ c);
                shareData.plus(2);
                shareData.setCurrentThread(ShareData.THREAD_2);
                shareData.notifyAll();
                try {
                    while (shareData.isALive() && shareData.getCurrentThread() != ShareData.THREAD_1) {
                        shareData.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
        synchronized (ShareData.getInstance()) {
            shareData.notifyAll();
        }
    }
}


#ThreadTwo.java


public class ThreadTwo extends Thread{
    ShareData shareData;

    public ThreadTwo() {
        this.shareData = ShareData.getInstance();
    }

    @Override
    public void run() {

        while (shareData.isALive()){
            try {
                Thread.sleep(1000);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (shareData){
                shareData.notifyAll();
                try {
                    while (shareData.isALive() && shareData.getCurrentThread() != ShareData.THREAD_2) {
                        shareData.wait();
                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                char characterCase = (char)(shareData.getRad() - 32);
                System.out.println("Char Case: " + characterCase);
                shareData.plus(1);
                shareData.setCurrentThread(ShareData.THREAD_1);

            }
        }
        synchronized (ShareData.getInstance()) {
            shareData.notifyAll();
        }
    }
}


Nguyễn Hùng Anh [community,C2009G]

Ngày viết: 11:02 14/09/2021


#Main.java


public class Main {
    public static void main(String [] args) {
        ThreadOne t1 = new ThreadOne();
        ThreadTwo t2 = new ThreadTwo();

        t1.start();
        t2.start();
    }
}


#SharedData.java


public class SharedData {
    public static final int THREAD_1 = 1;
    public static final int THREAD_2 = 2;

    int rad;
    int time;
    int currentThread = THREAD_1;

    private static SharedData instance = null;

    private SharedData() {
        time = 0;
    }

    public synchronized static SharedData getInstance() {
        if(instance == null) {
            instance = new SharedData();
        }
        return instance;
    }

    public int getRad() {
        return rad;
    }

    public void setRad(int rad) {
        this.rad = rad;
    }

    public int getCurrentThread() {
        return currentThread;
    }

    public void setCurrentThread(int currentThread) {
        this.currentThread = currentThread;
    }

    public boolean isRunning() {
        return time <= 20;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time += time;
    }
}


#ThreadOne.java


import java.util.Random;

public class ThreadOne extends Thread{
    SharedData sharedData;

    public ThreadOne() {
        this.sharedData = SharedData.getInstance();
    }

    @Override
    public void run() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Random random = new Random();

        while (sharedData.isRunning()){
            synchronized (sharedData) {
                char c = (char) ('a' + random.nextInt(26));
                System.out.println(c);

                sharedData.setRad(c);
                sharedData.setTime(2);
                sharedData.setCurrentThread(SharedData.THREAD_2);

                sharedData.notifyAll();
                try {
                    while (sharedData.isRunning() && sharedData.getCurrentThread() != SharedData.THREAD_1) {
                        sharedData.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }

        System.out.println("T1 stop");
        synchronized (sharedData) {
            sharedData.notifyAll();
        }
    }
}


#ThreadTwo.java


public class ThreadTwo extends Thread{
    SharedData sharedData;

    public ThreadTwo() {
        this.sharedData = SharedData.getInstance();
    }

    @Override
    public void run() {
        while (sharedData.isRunning()){
            try {
                Thread.sleep(1000);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (sharedData) {
                sharedData.notifyAll();
                try {
                    while (sharedData.isRunning() && sharedData.getCurrentThread() != SharedData.THREAD_2) {
                        sharedData.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                int c = sharedData.getRad();
                System.out.println((char) (c -32));
                sharedData.setTime(1);

                sharedData.setCurrentThread(SharedData.THREAD_1);
            }

        }

        System.out.println("T2 stop");
        synchronized (sharedData) {
            sharedData.notifyAll();
        }
    }
}


hieuvm0512 [community,C2010L]

Ngày viết: 16:34 22/08/2021


Main
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.capitalizethread;

/**
 *
 * @author vuive
 */
public class Main {
    public static void main(String[] args){
    Thread1 T1 = new Thread1();
    Thread2 T2 = new Thread2();
    
    T1.start();
    T2.start();
    }
    
}


hieuvm0512 [community,C2010L]

Ngày viết: 16:34 22/08/2021


Thread2
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.capitalizethread;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author vuive
 */
public class Thread2 extends Thread {

    @Override
    public void run() {
        ShareData shareData = ShareData.getInstance();
        while (shareData.isLive()) {
            synchronized (shareData) {

                shareData.notifyAll();
                try {
                    while (shareData.isLive() && shareData.getCurrentThread() != ShareData.Thread_2) {
                        shareData.wait();
                    }
                    if (!shareData.isLive()) {
                        break;
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(Thread2.class.getName()).log(Level.SEVERE, null, ex);
                }
                char c = ShareData.getInstance().getC();
                char d = ShareData.getInstance().Change(c);
                System.out.println("Doi 1s");
                try {
                    Thread2.sleep(1000);

                } catch (InterruptedException ex) {
                    Logger.getLogger(Thread2.class.getName()).log(Level.SEVERE, null, ex);
                }
                
                System.out.println(d + "\n");
                shareData.setCurrentThread(ShareData.Thread_1);

            }

        }
        System.out.println("T2 Stop");
        synchronized (shareData) {
            shareData.notifyAll();
        }

    }
}


hieuvm0512 [community,C2010L]

Ngày viết: 16:33 22/08/2021


Thread1
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.capitalizethread;

import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author vuive
 */
public class Thread1 extends Thread {

    @Override
    public void run() {
//        for(int i = 0; i<10;i++){
//        Random r = new Random();
//        System.out.println("Thread1 Start");
//        synchronized(shareData){
//         char c = (char) (r.nextInt(26)+('a'));
//         shareData.setC(c);
//         System.out.println(c);
//        }
//        shareData.notifyAll();
//        shareData.wait();
//        
//        
//        }
        ShareData shareData = ShareData.getInstance();

        for (int i = 0; i < 10; i++) {
                        System.out.println("Doi 2s");
            try {
                Thread1.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Thread1.class.getName()).log(Level.SEVERE, null, ex);
            }

            synchronized (shareData) {
                Random r = new Random();
                char c = (char) (r.nextInt(26) + ('a'));
                ShareData.getInstance().setC(c);
                System.out.println(c);
                shareData.setCurrentThread(ShareData.Thread_2);
                shareData.notifyAll();
                while (shareData.getCurrentThread() != ShareData.Thread_1) {
                    try {
                        shareData.wait();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Thread1.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

        }
        shareData.setLive(false);
        System.out.println("T1 stop");
        synchronized (shareData) {
            shareData.notifyAll();
        }

    }
}


Phân Loại Bài Viết

Tài Liệu Tham Khảo

Đã sao chép!!!