Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (968.44 KB, 21 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<b>Nguyễn Hữu Thể</b>
Đơn vị cơ bản sử dụng CPU là quá trình.
Mỗi quá trình có một khơng gian địa chỉ và một khơng gian trạng
thái riêng
Đơn vị cơ bản sử dụng CPU là Thread.
Mỗi q trình có một khơng gian địa chỉ và nhiều Thread điều khiển.
Mỗi Thread có bộ đếm chương trình, trạng thái các thanh ghi và
ngăn xếp riêng.
Thread của một q trình có thể chia sẻ nhau khơng gian địa chỉ :
Biến tồn cục, tập tin, chương trình con, hiệu báo, . . .
• Chuẩn bị mọi thứ cần thiết để thực hiện Thread.
• Chứa mã lệnh thực hiện cơng việc thực sự của Thread.
• run() được gọi một cách tự động bởi start().
Hoặc tất cả các lệnh trong run() đã được thực thi.
Thread() Tạo Thread với giá trị mặc định
Thread(String name) Tạo Thread với tên cho trước
Thread(Runnable target) Tạo thread liên kết với đối tượng Runnable
Thread(Runnable target, String
name)
class MyThread extends Thread // Kế thừa lớp Thread
{
// ...
public void run() // Override phương thức run
{
// ...
}
// ...
}
MyThread t = new MyThread(); // Tạo tiểu trình
t.start(); // Gọi thực thi tiểu trình
<b>class</b> MyThread <b>extends</b> Thread { // Kế thừa lớp Thread
<b>public void</b> run() // Override phương thức run
{
<b>int</b> i = 0;
<b>while</b> (i < 10) {
System.<i>out</i>.println(getName() + " " + i);
i++;
}
}
<b>public static void</b> main(String[] args) {
MyThread t1 = <b>new</b> MyThread(); // Tạo Thread
• Là phương thức khởi tạo, có nhiệm vụ gán giá trị cho 2 thuộc tính và
gọi phương thức start() để cho thread hoạt động (start() tự động gọi
run())
• In n lần dịng thơng báo ra màn hình rồi kết thúc thread.
<b>13</b>
<b>public class</b> MyThread2 <b>extends</b> Thread {
String name;
<b>int</b> n;
MyThread2(String name, <b>int</b> n) {
<b>this</b>.name = name;
<b>this</b>.n = n;
System.<i>out</i>.println("Thread " + name + " has been created.");
start();
}
<b>public void</b> run() {
<b>for</b> (<b>int</b> i = 0; i < n; i++) {
System.<i>out</i>.println("Hello, I'm " + name);
System.<i>out</i>.println(" I go to bed now, bye bye.");
}
}
<b>public static void</b> main(String args[]) {
<b>int</b> n = 10;
<b>int</b> numThread = 4;
<b>for</b> (<b>int</b> i = 0; i < numThread; i++) {
MyThread2 t = <b>new</b> MyThread2("Thread" + i, n);
}
I go to bed now, bye bye...
Thread Thread2 has been created ....!
Hello, I'm Thread1
I go to bed now, bye bye...
Hello, I'm Thread0
I go to bed now, bye bye...
Hello, I'm Thread1
I go to bed now, bye bye...
Thread Thread3 has been created ....!
Hello, I'm Thread1
I go to bed now, bye bye...
Hello, I'm Thread0
I go to bed now, bye bye...
Hello, I'm Thread2
I go to bed now, bye bye...
Hello, I'm Thread1
I go to bed now, bye bye...
Hello, I'm Thread3
I go to bed now, bye bye...
Hello, I'm Thread0
I go to bed now, bye bye...
Hello, I'm Thread3
I go to bed now, bye bye...
Hello, I'm Thread2
I go to bed now, bye bye...
Hello, I'm Thread3
I go to bed now, bye bye...
Hello, I'm Thread0
I go to bed now, bye bye...
Hello, I'm Thread1
I go to bed now, bye bye...
Hello, I'm Thread0
o Làm cho Thread bị nghẽn (Blocked) một khoảng thời gian mili giây xác
định.
o Chuyển Thread từ trạng thái sẳn sàng sang trạng thái nghẽn.
o Chuyển Thread từ trạng thái nghẽn sang trạng thái sẵn sàng.
o Chuyển Thread từ trạng thái đang chạy sang trạng thái sẵn sàng.
public class HelloRunnable implements Runnable {
public void run() {
System.<i>out</i>.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
<b>21</b>
<b>Runnable - EX 2</b>
<b>public class</b> <b>RunnableThread implements</b> <b>Runnable {</b>
<b>Thread runner;</b>
<b>public</b> <b>RunnableThread() {</b>
<b>}</b>
<b>public</b> <b>RunnableThread(String threadName) {</b>
<b>runner</b> <b>= new</b> <b>Thread(this, threadName);//(1)Create a new thread.</b>
<b>System.</b><i><b>out</b></i><b>.println(runner.getName());</b>
<b>runner.start(); // (2) Start the thread.</b>
<b>}</b>
<b>public void</b> <b>run() { // Display info about this particular thread</b>
<b>System.</b><i><b>out</b><b>.println(Thread.currentThread());</b></i>
<b>}</b>
<b>public static void</b> <b>main(String[] args) {</b>
<b>Thread thread1 = new</b> <b>Thread(new</b> <b>RunnableThread(), "thread1");</b>
<b>thread1.start(); </b>
<b>thread2.start();</b>
<b>try</b> <b>{</b> <b>// delay for one second</b>
<i><b>Thread.currentThread().sleep(1000);</b></i>
<b>} catch</b> <b>(InterruptedException e) {</b>
<b>}</b>
<b>// Display info about the main thread</b>