Cách tạo luồng bằng cách hiện thực từ Interface Runnable

Một phần của tài liệu Đề tài khoa học - Tìm hiểu cơ chế phân luồng trong các chương trình java - Học viện Kỹ thuật Mật mã (Trang 28 - 32)

- Một luồng nhân chỉ có một cấu trúc dữ liệu nhân và ngăn xếp Cấu trúc dữ liệu

2.2.2Cách tạo luồng bằng cách hiện thực từ Interface Runnable

Phần 3: Luồng trong java 2.1 Khái niệm luồng trong java

2.2.2Cách tạo luồng bằng cách hiện thực từ Interface Runnable

Để tạo luồng bằng cách hiện thực từ Interface Runnable, ta phải làm các công việc sau :

+ Khai báo 1 lớp mới implements từ Interface Runnable

+ Hiện thực phương thức run() ở lớp này, những gì trong phương thức run() sẽ được thực thi khi luồng bắt đầu chạy. Sau khi luồng chạy xong tất cả các câu lệnh trong phương thức run thì luồng cũng tự hủy.

+ Tạo 1 thể hiện (hay 1 đối tượng) của lớp ta vừa khai báo. (VD : Tên đối tượng là r1)

+ Tạo 1 thể hiện của lớp Thread bằng phương thức khởi tạo : Thread(Runnable target)

Runnable target: Là 1 đối tượng thuốc lớp được implements từ giao diện Runnable VD:

Thread t1=new Thread(r1);

+ Gọi phương thức start() của đối tượng t1

Ví dụ cách tạo luồng bằng cách hiện thức giao diện Runnable :

+ Khai báo lớp mới RunX implements từ interface Runnable và hiện thực phương thức run() :

PHP Code:

package MultiThread;

private String prefix=""; public RunX(String p) {

prefix=p; }

public void run() {

for(int i=0;i<100;i++)

System.out.println(prefix+i); }

}

+ Tạo các thể hiện của lớp RunX,Thread và start() chúng : PHP Code:

package MultiThread; public class Main {

public static void main(String[] args) { RunX r1=new RunX("Luồng thứ 1:"); RunX r2=new RunX("Luồng thứ 2:"); RunX r3=new RunX("Luồng thứ 3:"); Thread t1=new Thread(r1);

Thread t2=new Thread(r2); Thread t3=new Thread(r3);

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

}

2.3 Một số thông tin liên quan đến luồng (ThreadID,ThreadName,Piority,StackSize) (ThreadID,ThreadName,Piority,StackSize)

Luồng được thành lập bởi 1 định danh (ThreadID), Bộ đếm chương trình

(Counter), Tập Thanh Ghi (Register) và Ngăn xếp (Stack). Các luồng sẽ có 1 độ ưu tiên (Priority) nhất định. Trong phần này chúng ta sẽ đề cập chi tiết đến các thông tin này bao gồm:

+ ThreadID + ThreadName + Priority + StackSize

2.3.1 ThreadID

ThreadID là định danh của luồng, nó dùng để phân biệt với các luồng khác cùng tiến trình hoặc cùng tập luồng. Đây là thông số mà máy ảo java tự tạo ra khi ta tạo luồng nên ta không thể sửa đổi cũng như áp đặt thông số này khi tạo luồng. Nhưng ta có thể lấy được nó thông qua phương thức getId() của lớp Thread

1. VD (Sử dụng lại lớp ThreadX khai báo ở trên ): PHP Code: (adsbygoogle = window.adsbygoogle || []).push({});

public class Main {

public static void main(String[] args) {

ThreadX t1=new ThreadX("Luồng thứ 1:"); ThreadX t2=new ThreadX("Luồng thứ 2:"); ThreadX t3=new ThreadX("Luồng thứ 3:"); System.out.println("ID luồng 1:"+t1.getId()); System.out.println("ID luồng 2:"+t2.getId()); System.out.println("ID luồng 3:"+t3.getId()); t1.start(); t2.start(); t3.start(); } } 2.3.2 ThreadName

ThreadName là tên của luồng, đây là thuộc tính mà ta có thể đặt hoặc không đặt cho luồng. Nếu ta không đặt cho luồng thì máy ảo java sẽ tự đặt với quy tắc sau: “Thread-” + Thứ tự luồng được tạo ra, bắt đầu từ 0.

VD:

PHP Code:

package MultiThread; public class Main {

ThreadX t1=new ThreadX("Luồng thứ 1:"); ThreadX t2=new ThreadX("Luồng thứ 2:"); ThreadX t3=new ThreadX("Luồng thứ 3:");

System.out.println("Tên luồng 1:"+t1.getName()); System.out.println("Tên luồng 2:"+t2.getName()); System.out.println("Tên luồng 3:"+t3.getName()); }

}

Một phần của tài liệu Đề tài khoa học - Tìm hiểu cơ chế phân luồng trong các chương trình java - Học viện Kỹ thuật Mật mã (Trang 28 - 32)