TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT

Quảng cáo

Hướng dẫn cách sử dụng sleep() và join()

Trong bài trước, các bạn đã được học về cách đồng bộ luồng trong Java. Sang bài này, tôi sẽ hướng dẫn các bạn cách tìm hiểu các tính năng của Thread, mở đầu là cách sử dụng sleep() join(). Các bạn theo dõi nhé!

1. sleep()

Phương thức sleep() của lớp Thread được sử dụng để tạm ngưng một Thread đang hoạt động trong một khoảng thời gian nhất định. Để sử dụng phương thức sleep(), Java cung cấp cho chúng ta 2 cú pháp như sau:

Quảng cáo

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
Cú pháp
Thread.sleep(long millis);	// tạm dừng Thread với khoảng thời gian dừng tính bằng millisecond
Thread.sleep(long millis, int nanos);	// tạm dừng Thread với khoảng thời gian dừng tính bằng thời gian millis (tính bằng milliseconds) cộng với thời gian nanos (tính bằng nanoseconds và nằm trong khoảng từ 0-999999)

, trong đó millis là khoảng thời gian tính bằng milliseconds và nanos là khoảng thời gian tính bằng nanoseconds.

Lưu ý: Trong khi sử dụng phương thức sleep() này thì trình biên dịch sẽ bắt buộc chúng ta sinh ra đoạn try...catch bao bọc bên ngoài. Tạm thời các bạn đừng để ý đến nó mà chỉ cần hiểu đây là điều bắt buộc khi muốn sử dụng sleep(). Chi tiết về try...catch tôi sẽ trình bày trong chương sau.

Để minh họa cách sử dụng phương thức sleep(), tôi sẽ đưa ra ví dụ minh họa đơn giản như sau:

DemoSleep.java
package phuongthucsleep;

public class DemoSleep extends Thread {

	public void run() {
		super.run();
		for (int i = 1; i <= 5; i++) {
			System.out.println("Đây là Thread thứ " + i);
			System.out.println("Tạm dừng 5000 milliseconds trước khi chuyển sang Thread tiếp theo");
			if (i == 5) {
				System.out.println("Kết thúc!");
			}
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	// tạm dừng 5000 milliseconds trước khi in ra câu tiếp theo
		}
	}
	
}

Quảng cáo

Test.java
package phuongthucsleep;

public class Test {

	public static void main(String[] args) {
		DemoSleep t1 = new DemoSleep();
		t1.start();
	}

}

Kết quả sau khi biên dịch chương trình:

ketqua vi du sleep PNG

2. join()

Phương thức join() được sử dụng để đảm bảo cho quá trình thực thi của Thread đang chạy không bị gián đoạn bởi các Thread khác. Nói một cách khác, nếu một Thread đang trong quá trình được thực thi thì các Thread khác sẽ phải chờ đợi cho đến khi Thread đó thực thi xong. join() được sử dụng khi trong một chương trình Java có nhiều hơn một Thread và chúng ta cần đảm bảo các Thread thực thi và kết thúc đúng theo thứ tự mà chúng đã được khởi tạo.

Để hiểu hơn vai trò của join(), các bạn hãy theo dõi 2 ví dụ sau: Ví dụ thứ nhất là ví dụ không sử dụng join() và ví dụ thứ hai là ví dụ có sử dụng phương thức join():

Ví dụ không sử dụng join()

Quảng cáo

NoneJoinThread.java
package phuongthucjoin;

public class NoneJoinThread extends Thread {

	public void run() {
		super.run();
		System.out.println(Thread.currentThread().getName() + " đang chạy.");
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("Kết thúc " + Thread.currentThread().getName());
	}

}

TestNoneJoinThread.java
package phuongthucjoin;

public class TestNoneJoinThread {

	public static void main(String[] args) {
		NoneJoinThread thread1 = new NoneJoinThread();
		thread1.setName("Thread 1");
		NoneJoinThread thread2 = new NoneJoinThread();
		thread2.setName("Thread 2");
		NoneJoinThread thread3 = new NoneJoinThread();
		thread3.setName("Thread 3");
		
		thread1.start();
		thread2.start();
		thread3.start();
	}

}

Kết quả sau khi biên dịch chương trình:

ketqua vi du khong su dung join PNG

Ví dụ sử dụng join()

JoinThread.java
package phuongthucjoin;

public class JoinThread extends Thread {
	
	public void run() {
		super.run();
		System.out.println(Thread.currentThread().getName() + " đang chạy.");
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("Kết thúc " + Thread.currentThread().getName());
	}
	
}

TestJoinThread.java
package phuongthucjoin;

public class TestJoinThread {

	public static void main(String[] args) {
		JoinThread thread1 = new JoinThread();
		thread1.setName("Thread 1");
		thread1.start();	// khởi chạy thread 1
		try {
			thread1.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		JoinThread thread2 = new JoinThread();
		thread2.setName("Thread 2");
		thread2.start();	// khởi chạy thread2
		try {
			thread2.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		JoinThread thread3 = new JoinThread();
		thread3.setName("Thread 3");
		thread3.start();	// khởi chạy thread3
		try {
			thread3.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

Kết quả sau khi biên dịch chương trình:

ketqua vi du su dung join PNG

Giải thích hoạt động của hai chương trình trên

Trong ví dụ 1 (ví dụ không sử dụng join()) thì chúng ta thấy rằng 3 thread1, thread2, thread3 được khởi chạy theo đúng thứ tự thread1thread2thread3, nhưng khi kết thúc thì 3 Thread này không theo thứ tự thread1thread2thread3. Ở mỗi thời điểm chạy chương trình có thể nhận được các kết quả khác nhau.

Còn khi chúng ta sử dụng join() (trong ví dụ 2) thì khi thread1 đang thực thi thì thread2thread3 chưa khởi chạy ngay cho dù có lệnh thread2.start()thread3.start() mà phải đợi cho đến khi thread1 thực thi xong. Tương tự khi thread2 đang chạy thì thread3 vẫn phải đợi cho đến khi thread2 thực thi xong. Do đó mà kết quả in ra màn hình theo đúng thứ tự thread1thread2thread3 mà chúng đã được khởi chạy.

3. Lời kết

Trong bài này, tôi đã hướng dẫn các bạn tìm hiểu về cách sử dụng sleep()join().Sang bài sau, tôi sẽ trình bày các phần còn lại liên quan đến Thread. Các bạn theo dõi nhé!

Quảng cáo

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top