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 (606.26 KB, 43 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
xử lý tuần tự.
lỗi phát sinh ở đâu.
chưa thực thi xong thì các câu lệnh khác khơng được chạy không hợp lý.
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><small></small> <b>Hệ điều hành đa nhiệm cổ điển: </b>
<small></small> Process là đoạn chương trình độc lập đã được nạp vào bộ nhớ. <small></small> Mỗi process thi hành một ứng dụng riêng.
<small></small> Mỗi process có một khơng gian địa chỉ và một không gian trạng thái riêng.
<small></small> Các process liên lạc với nhau thông qua cơ chế điều phối của HĐH.
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6"><small></small> <b>Hệ điều hành đa nhiệm hiện đại, hỗ trợ thread: </b>
<small></small> Thread một đoạn các câu lệnh được thi hành.
<small></small> Mỗi process có một khơng gian địa chỉ và nhiều thread
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7"><small></small> Luồng 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, . . .
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8"><small>Main Thread </small>
<small>Các thread có thể chuyển đổi dữ liệu với nhau </small>
<small>9 </small>
<b>Printing Thread </b>
<b>Editing Thread </b>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><small>+isAlive()+join()+interrupt()+start()+stop()</small>
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">của lớp Thread.
<small></small>
<small></small>
<small></small>
được thực thi. Luồng này được tạo ra một cách tự động. tại đây:
luồng chính ngừng thực thi, chương trình bị chấm dứt
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14"><b> class MyThread extends Thread </b>
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15"><b> public void run() { </b>
System.out.println(" this thread is running ... "); }
} // end class MyThread
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16"><b>class ThreadEx1 { // a program that utilizes the thread </b>
public static void main(String [] args ) {
<b> MyThread t = new MyThread(); </b>
<b> t.start(); </b>
} // end main()
} // end class ThreadEx1
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">class MyThread implements Runnable { ...
public void run() {
} }
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">MyThread myObject = new MyThread();
Thread thr1 = new Thread(myObject);
thr1.start();
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">class MyThread implements Runnable { public void run() {
System.out.println(" this thread is running ... "); }
} // end class MyThread
class ThreadEx2 {
public static void main(String [] args ) {
<b> Thread t = new Thread(new MyThread()); </b>
<b> t.start(); </b>
} // end main()
} // end class ThreadEx2
time slice
notify, notifyAll, IO complete, sleep expired,
join complete
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24"><small></small> <b>Viết chương trình thi hành song song 3 thread </b>
class A extends Thread { public void run() {
class B extends Thread { public void run() {
class C extends Thread { public void run() {
class ThreadTest {
public static void main(String args[]) { new A().start();
new B().start(); new C().start(); }
}
<small>java ThreadTest </small>
<small> From ThreadA: i= 1 From ThreadA: i= 2 From ThreadA: i= 3 From ThreadA: i= 4 From ThreadA: i= 5 Exit from A </small>
<small> From ThreadC: k= 1 From ThreadC: k= 2 From ThreadC: k= 3 From ThreadC: k= 4 From ThreadC: k= 5 Exit from C </small>
<small> From ThreadB: j= 1 From ThreadB: j= 2 From ThreadB: j= 3 From ThreadB: j= 4 From ThreadB: j= 5 Exit from B </small>
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29"><small>java ThreadTest </small>
<small> From ThreadA: i= 1 From ThreadA: i= 2 From ThreadA: i= 3 From ThreadA: i= 4 From ThreadA: i= 5 From ThreadC: k= 1 From ThreadC: k= 2 From ThreadC: k= 3 From ThreadC: k= 4 From ThreadC: k= 5 Exit from C </small>
<small> From ThreadB: j= 1 From ThreadB: j= 2 From ThreadB: j= 3 From ThreadB: j= 4 From ThreadB: j= 5 Exit from B </small>
<small>Exit from A </small>
của thread. Khi thread được tạo ra có độ ưu tiên mặc định (NORM_PRIORITY).
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34"><small>class ThreadPriority { </small>
<small> public static void main(String args[]) { A threadA=new A(); </small>
<small> B threadB=new B(); C threadC=new C(); </small>
<small> threadC.setPriority(Thread.MAX_PRIORITY); threadB.setPriority(threadA.getPriority()+1); threadA.setPriority(Thread.MIN_PRIORITY); System.out.println("Started Thread A"); </small>
<small> threadA.start(); </small>
<small> System.out.println("Started Thread B"); threadB.start(); </small>
<small> System.out.println("Started Thread C"); threadC.start(); </small>
<small> System.out.println("End of main thread"); } </small>
<small>} </small>
thi hành một khoảng thời gian ngẫu nhiên.
</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37"><b><small> 1 // ThreadTester.java </small></b>
<b><small> 2 // Show multiple threads printing at different intervals. </small></b>
<b><small> 3 </small></b>
<b><small> 4 public class ThreadTester { </small></b>
<b><small> 5 public static void main( String args[] ) </small></b>
<b><small> 6 { </small></b>
<b><small> 7 PrintThread thread1, thread2, thread3, thread4; </small></b>
<b><small> 8 </small></b>
<b><small> 9 thread1 = new PrintThread( "thread1" ); </small></b>
<b><small>10 thread2 = new PrintThread( "thread2" ); </small></b>
<b><small>11 thread3 = new PrintThread( "thread3" ); </small></b>
<b><small>12 thread4 = new PrintThread( "thread4" ); </small></b>
<b><small>25 class PrintThread extends Thread { </small></b>
<b><small>26 private int sleepTime; </small></b>
<b><small>27 </small></b>
<b><small>28 // PrintThread constructor assigns name to thread </small></b>
<b><small>29 // by calling Thread constructor </small></b>
<b><small>main </small></b><small>kết thúc khi thread cuối cùng kết thúc. </small>
</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38"><b><small>30 public PrintThread( String name ) </small></b>
<b><small>31 { </small></b>
<b><small>32 super( name ); </small></b>
<b><small>33 </small></b>
<b><small>34 // sleep between 0 and 5 seconds </small></b>
<b><small>35 sleepTime = (int) ( Math.random() * 5000 ); </small></b>
<b><small>41 // execute the thread </small></b>
<b><small>42 public void run() </small></b>
<b><small>53 // print thread name </small></b>
<b><small>54 System.err.println( getName() + " done sleeping" ); </small></b>
<b><small>55 } </small></b>
<b><small>56 } </small></b>
<small>Gọi constructor lớp cha </small>
<b><small>Sleep </small></b><small>có thể ném ra biệt lệ Công việc của thread </small>
</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40"><i><small>class Parentheses { void display(String s) { System.out.print("(" + s); try { </small></i>
<i><small> Thread.sleep(1000); </small></i>
<i><small> } catch (InterruptedException e) { System.out.println("Interrupted"); } </small></i>
<i><small> System.out.println(")"); } </small></i>
<i><small>} </small></i>
</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41"><i><small>class MyThread implements Runnable { String str; </small></i>
<i><small> Parentheses parentTheses; Thread t; </small></i>
<i><small> public MyThread(Parentheses p, String s) { parentTheses = p; </small></i>
<i><small> str = s; </small></i>
<i><small> t = new Thread(this); t.start(); </small></i>
<i><small> } </small></i>
<i><small> public void run() { </small></i>
<i><small> parentTheses.display(str); } </small></i>
<i><small>} </small></i>
</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42"><small> name1.t.join(); // tạm dừng cho đến khi thread kết thúc name2.t.join(); </small>
<small> } catch (InterruptedException e) { System.out.println("Interrupted"); } </small>
<small> } } </small>
</div><span class="text_page_counter">Trang 43</span><div class="page_container" data-page="43"><i> } </i>
</div>