VietTuts

Học java cơ bản đến nâng cao

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • Java WS
  • MyBatis
  • Eclipse
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • PHP
    • CSS
    • HTML
  • SQL
    • MySQL
    • SQL Server
    • PostgreSQL
    • SQLite
  • Misc
    • Phần mềm tiện ích
    • Selenium Test
    • Lập trình C
    • Lập trình C++
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

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


Lớp Runtime trong java
Khối đồng bộ trong java

Đồng bộ trong java

Đồng bộ trong java (Synchronization in java) là khả năng kiểm soát truy cập của nhiều luồng đến bất kỳ nguồn tài nguyên chia sẻ (shared resource).

Giả sử có nhiều luồng muốn truy cập cùng một biến cùng một thời điểm. Ví dụ một luồng muốn đọc, trong khi luồng khác cố gắng thay đổi dữ liệu dẫn dến dữ liệu bị sai lệch. Trong trường hợp này, Java Synchronization là lựa chọn tốt khi chúng ta muốn cho phép chỉ một luồng được truy cập vào tài nguyên chia sẻ đó.


Tại sao sử dụng Synchronization

Việc đồng bộ hóa chủ yếu được sử dụng để:

  1. Để tránh sự can thiệp của luồng khác.
  2. Để đảm bảo vấn đề nhất quán của chương trình.

Vấn đề xảy ra khi không sử dụng đồng bộ

Trong ví dụ này, không có sự đồng bộ, vì vậy đầu ra không phù hợp. Hãy xem ví dụ:

class Table {
    void printTable(int n) {// method không synchronized
        for (int i = 1; i <= 5; i++) {
            System.out.println(n * i);
            try {
                Thread.sleep(400);
            } catch (Exception e) {
                System.out.println(e);
            }
        }

    }
}

class MyThread1 extends Thread {
    Table t;

    MyThread1(Table t) {
        this.t = t;
    }

    public void run() {
        t.printTable(5);
    }
}

class MyThread2 extends Thread {
    Table t;

    MyThread2(Table t) {
        this.t = t;
    }

    public void run() {
        t.printTable(100);
    }
}

public class TestSynchronization1 {
    public static void main(String args[]) {
        Table obj = new Table();// tao mot object
        MyThread1 t1 = new MyThread1(obj);
        MyThread2 t2 = new MyThread2(obj);
        t1.start();
        t2.start();
    }
}

Output:

5
100
200
10
300
15
400
20
25
500

Phương thức đồng bộ (synchronized method)

Nếu bạn khai báo bất kỳ phương pháp nào với từ khóa synchronized, nó được gọi là phương thức đồng bộ.

Phương thúc đồng bộ được sử dụng để khóa một đối tượng cho bất kỳ tài nguyên được chia sẻ.

Khi một luồng gọi một phương thức đồng bộ, nó sẽ tự động khóa cho đối tượng đó và giải phóng nó khi luồng hoàn thành nhiệm vụ.

Ví dụ về phương thức đồng bộ (synchronized method)

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

class MyThread1 extends Thread {
    Table t;

    MyThread1(Table t) {
        this.t = t;
    }

    public void run() {
        t.printTable(5);
    }
}

class MyThread2 extends Thread {
    Table t;

    MyThread2(Table t) {
        this.t = t;
    }

    public void run() {
        t.printTable(100);
    }
}

public class TestSynchronization2 {
    public static void main(String args[]) {
        Table obj = new Table();// tao mot object
        MyThread1 t1 = new MyThread1(obj);
        MyThread2 t2 = new MyThread2(obj);
        t1.start();
        t2.start();
    }
}

Output:

5
10
15
20
25
100
200
300
400
500

Ví dụ về synchronized method sử dụng lớp nặc danh

Trong chương trình sau đây, chúng ta đã tạo ra hai thread bằng lớp ẩn danh, do đó phải viết ít code hơn.

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

public class TestSynchronization3 {
    public static void main(String args[]) {
        final Table obj = new Table();// tao mot object

        Thread t1 = new Thread() {
            public void run() {
                obj.printTable(5);
            }
        };
        Thread t2 = new Thread() {
            public void run() {
                obj.printTable(100);
            }
        };

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

Output:

5
10
15
20
25
100
200
300
400
500

Lớp Runtime trong java
Khối đồng bộ trong java


Recent Updates

Kiểu dữ liệu trong MySQLChọn Database trong MySQLTạo ứng dụng JSP trên EclipseCú pháp trong JSPVòng đời của JSPKiến trúc JSPJSP là gì? - học JSP cần chuẩn bị những gì?Ví dụ về RESTful Web Service trong JavaKiến trúc hướng dịch vụ (SOA)So sánh SOAP và REST web serviceWeb Service là gì?Khái niệm lập trình hướng đối tượng trong C++

VietTuts on facebook

Học Java Cơ Bản Đến Nâng Cao - VietTuts.Vn

Danh sách bài học

Học java
Học servlet
Học jsp
Học Hibernate
Học Struts2
Học Spring
Học SQL

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 Struts2
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

About VietTuts.Vn

Hệ thống bài học trên VietTuts.Vn bao gồm các bài lý thuyết và thực hành về các công nghệ java và công nghệ web. Các bài lý thuyết trên hệ thống VietTuts.Vn được tham khảo và tổng hợp từ các trang http://javatpoint.com, http://www.tutorialspoint.com, http://docs.oracle.com/en ...

Scroll back to top

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