VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test
Java Cơ Bản Các Khái Niệm Java OOPs Java String Xử Lý Ngoại Lệ Các Lớp Lồng Nhau

Đa Luồng (Multithreading)

Java Thread Đa luồng trong java Vòng đởi của Thread Tạo Thread Thread Scheduler Sleep một thread Start một thread hai lần Gọi phương thức run() Phương thức join() Đặt tên cho thread Mức ưu tiên của một Thread Luồng hiểm Thread Pool Thread Group Shutdown Hook Thực hiện nhiều task Garbage Collection Lớp Runtime

Java Synchronization

Phương thức synchronization Khối synchronized Đồng bộ static Deadlock trong java Giao tiep giua cac thread Interrupt một Thread
Java AWT Java Swing Java I/O Ví Dụ Java I/O Lập Trình Mạng Với Java Java Date Chuyển Đối Kiểu Dữ Liệu Java Collections Java JDBC Các Tính Năng Mới Trong Java Bài Tập Java Có Lời Giải Câu Hỏi Phỏng Vấn Java
1 / 3
❮ ❯

Phương thức đồng bộ static


Khối đồng bộ trong java
Deadlock trong java

Nếu bạn tạo ra bất kỳ phương thức nào với từ khóa synchronized được gọi là phương thức đồng bộ static, khi đó khóa sẽ được sử dụng trên lớp không phải trên đối tượng.

phương thức đồng bộ static trong java

Vấn đề khi không sử dụng phương thức đồng bộ static

Giả sử có hai đối tượng của một lớp được chia sẻ (ví dụ: Table) có tên object1 và object2. Trong trường hợp phương thức đồng bộ và khối đồng bộ không thể can thiệp giữa t1 và t2 hoặc t3 và t4 vì t1 và t2 đều tham chiếu đến một đối tượng chung có một khóa duy nhất. Nhưng có thể có sự va chạm giữa t1 và t3 hoặc t2 và t4 bởi vì t1 lấy được một khóa khác và t3 có được một khóa khác. Tôi không muốn sự xen vào giữa t1 và t3 hoặc t2 và t4. Phương thức đồng bộ hóa static được sử dụng để giải quyết vấn đề này.

Nội dung chính

  • Ví dụ về phương thức đồng bộ hóa static
  • Ví dụ về phương thức đồng bộ hóa static sử dụng lớp nặc danh

Ví dụ về phương thức đồng bộ hóa static

Trong ví dụ này chúng ta áp dụng từ khóa synchronized trên phương pháp tĩnh để thực hiện đồng bộ hóa static.

File: TestSynchronization4.java

class Table {

    synchronized static void printTable(int n) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(n * i);
            try {
                Thread.sleep(400);
            } catch (Exception e) {
            }
        }
    }
}

class MyThread1 extends Thread {
    public void run() {
        Table.printTable(1);
    }
}

class MyThread2 extends Thread {
    public void run() {
        Table.printTable(10);
    }
}

class MyThread3 extends Thread {
    public void run() {
        Table.printTable(100);
    }
}

class MyThread4 extends Thread {
    public void run() {
        Table.printTable(1000);
    }
}

public class TestSynchronization4 {
    public static void main(String t[]) {
        MyThread1 t1 = new MyThread1();
        MyThread2 t2 = new MyThread2();
        MyThread3 t3 = new MyThread3();
        MyThread4 t4 = new MyThread4();
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

Output:

1
2
3
4
5
6
7
8
9
10
10
20
30
40
50
60
70
80
90
100
100
200
300
400
500
600
700
800
900
1000
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

Ví dụ về phương thức đồng bộ hóa static sử dụng lớp nặc danh

Trong ví dụ này, chúng ta sử dụng lớp nặc danh để tạo các thread.

File: TestSynchronization5.java

class Table {

    synchronized static void printTable(int n) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(n * i);
            try {
                Thread.sleep(400);
            } catch (Exception e) {
            }
        }
    }
}

public class TestSynchronization5 {
    public static void main(String[] args) {

        Thread t1 = new Thread() {
            public void run() {
                Table.printTable(1);
            }
        };

        Thread t2 = new Thread() {
            public void run() {
                Table.printTable(10);
            }
        };

        Thread t3 = new Thread() {
            public void run() {
                Table.printTable(100);
            }
        };

        Thread t4 = new Thread() {
            public void run() {
                Table.printTable(1000);
            }
        };
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

Output:

1
2
3
4
5
6
7
8
9
10
10
20
30
40
50
60
70
80
90
100
100
200
300
400
500
600
700
800
900
1000
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

Khối đồng bộ trong java
Deadlock trong java

Recent Updates

Sắp Tết 2024 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2024?Java Swing - Bài tập quản lý sinh viên trong javaLinkedList trong javaArrayList trong javaBài tập java có lời giảiSử dụng Javascript trong HTMLToán tử dấu 2 chấm (::) trong Java 8Lambda Expression - Biểu thức Lambda trong java 8Bài tập Java - Sắp xếp nhanh (Quick Sort) trong JavaBài tập Java - Sắp xếp chèn (Insertion Sort) trong JavaBài tập Java - Sắp xếp nổi bọt (Bubble Sort) trong JavaBài tập quản lý sinh viên trong JavaHashSet trong java

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml