Java: Câu hỏi và bài tập phần Concurrency - Thread

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Câu hỏi:

  1. Bạn có thể truyền một đối tượng Thread tới Executor.execute không? Nếu có thì lời gọi đó như thế nào?

Bài tập:

Bài tập 1:

Biên dịch và chạy tập tin sau:

public class BadThreads {

    static String message;

    private static class CorrectorThread

        extends Thread {

        public void run() {
            try {
                sleep(1000);
            } catch (InterruptedException e) {}
            // Key statement 1:
            message = "Mares do eat oats.";
        }
    }

    public static void main(String args[])
        throws InterruptedException {

        (new CorrectorThread()).start();
        message = "Mares do not eat oats.";
        Thread.sleep(2000);
        // Key statement 2:
        System.out.println(message);
    }
}

Đoạn mã trên sẽ in ra "Mares do eat oats". Liệu đoạn mã trên sẽ luôn in ra như vậy không? Nếu không thì vì sao? Nó có giúp thay đổi các tham số của hai lời gọi tới phương thức sleep()? Bạn có đảm bảo rằng tất cả các thay đổi tới bởi biến message sẽ xuất hiện trong luồng chính?

Bài tập2:

Thay đổi ví dụ producer-consumer trong Guarded Blocks bằng cách sử dụng lớp thư viện chuẩn thay vì sử dụng lớp Drop.

Bài tập 3:

Tạo một lớp có tên MyThread với hàm tạo là: MyThread(String name, int sleep). Khi tạo một thể hiện của lớp này thì sau khi luồng (thread) được bắt đầu, nó sẽ in ra name sau mỗi sleep giây. Viết một ứng dụng bằng Java sử dụng lớp MyThread để tạo hai thread, thread đầu tiên có tên "ABC" và sleep là 3.5 giây; thread thứ hai có tên "DEF" và sleep là 2.5 giây. Khi chạy ứng dụng, thì nó sẽ in ra màn hình "ABC" sau 3.5 giây và sau đó in ra màn hình "DEF" sau 2.5 giây.

Bài tập 4:

Viết chương trình gồm 2 Thread:

- Thread 1: Cứ mỗi 2 giây sinh ra 1 số có 4 chữ số

- Thread 2: Kiểm tra xem năm tương ứng với số tạo ra ở Thread 1 xem năm đó có phải là năm nhuận hay không?

Bài tập 5:

Tạo một map kiểu Map<String, String> với phần key chứa thứ theo tiếng Anh, phần value chứa thứ theo tiếng Việt.

Ví dụ:

Monday Thứ 2
Tuesday Thứ 3
Wednesday Thứ 4
Thursday Thứ 5
Friday Thứ 6
Saturday Thứ 7
Sunday Chủ nhật

Tạo hai thread thực hiện các công việc sau:

  - Thread thứ nhất: cứ sau mỗi một giây sẽ lấy một ngày ngẫu nhiên trong tuần bằng tiếng Anh (lấy từ map) rồi hiển thị ra màn hình.

  - Thread thứ hai: dựa trên ngày lấy được của thread thứ nhất rồi dựa vào map để hiển thị ra màn hình ngày bằng tiếng Việt.

Viết phương thức main() để thực thi các phương thức trên.

Lưu ý: Cần đồng bộ hóa các thread để đảm bảo thứ tự thực hiện đúng.

» Tiếp: Thread
« Trước: Số ngẫu nhiên đồng thời
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!