Thread boonrit@feu.ac.th.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างโปรแกรมภาษา JAVA
Advertisements

Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
The InetAddress Class.
1 C Programming An Introduction. 2 Preprocessing Directives เขียนได้ 2 รูปแบบ #include คอมไพเลอร์จะทำ การค้นหาเฮดเดอร์ไฟล์ที่ระบุ จากไดเร็คทอรีที่ใช้
การจัดการความผิดพลาด
จำนวน สถานะ NUMBER OF STATES. ประเด็นที่ สนใจ The number of distinct states the finite state machine needs in order to recognize a language is related.
Control Statement if..else switch..case for while do-while.
VARIABLES, EXPRESSION and STATEMENTS. Values and Data Types Value เป็นสิ่งพื้นฐาน มีลักษณะเป็น ตัวอักษร หรือ ตัวเลข อาทิ 2+2 หรือ “Hello world” Value.
ระบบการจัดเก็บในคลังสินค้า
Stack.
ครั้งที่ 7 Composition.
LOGO Array. ประเภทของ Array - อาเรย์ 1 มิติ (One) - อาเรย์ 2 มิติ (Two) - อาเรย์ 3 มิติ (Three) 2.
Merchant Marine Training Centre วิชาการเป็นเลิศ เชิดชู คุณธรรม ผู้นำ.
WEEK#16: Method เมธอดคือกลุ่มคําสั่งที่ถูกกําหนดขึ้นเพื่อทำงาน อย่างใดอย่างหนึ่งเพื่อให้ได้ผลลัพธ์ตาม ต้องการ การประกาศเมธอด มีรูปแบบดังนี้ [modifier]
คลาสและวัตถุ (2) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
คลาสและวัตถุ (3) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
คลาสและวัตถุ (2) (Class & Object)
ทบทวนเรื่อง GUI - กลุ่มคำสั่ง AWT Set (Abstract Windowing Toolkit) และ
บทที่ 4 Method (1).
File I/O (1) โปรแกรมจะอ่านหรือเขียนข้อมูลผ่านท่อส่งข้อมูล (Stream)
Javascripts.
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
อาร์เรย์ หรือแถวลำดับ (Array)
input from keyboard มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Algorithm มหาวิทยาลัยเนชั่น Java Pre-Test 49 (Series 1, 2 )
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 6 มิถุนายน 2556 Exception มหาวิทยาลัยเนชั่น
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
Page: 1 โครงสร้างคอมพิวเตอร์ และภาษาแอสเซมบลี้ ผศ. บุรินทร์ รุจจน พันธุ์.. ปรับปรุง 19 ตุลาคม 2555 Introduction to Batch.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 6 เมธอด.
JAVA PROGRAMMING PART IV.
การติดต่อกับฐานข้อมูล(MySQL)
โครงสร้างควบคุมการทำงาน
ครั้งที่ 3.
คำสั่งควบคุมการ ทำงาน การเขียนโปรแกรมโดยปกติ มีทั้งให้ทำงาน เป็นลำดับ ที่ละคำสั่ง บางครั้งมีการให้เปลี่ยน ลำดับในการทำคำสั่ง เพื่อให้การเขียน โปรแกรมมีประสิทธิภาพสูงสุด.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Java Programming Language สาขาวิชาระบบสารสนเทศ คณะบริหารธุรกิจ มหาวิทยาลัยเทคโนโลยีราชมงคลกรุงเทพ.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Thread Thread ส่วนของ process ที่ให้ CPU ประมวลผล.
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
The ServerSocket Class ใช้ในการจัดทำเครื่องที่เป็นการบริการ ใช้ในการจัดทำเครื่องที่เป็นการบริการ โดยจะมี ช่วงชีวิตดังนี้ โดยจะมี ช่วงชีวิตดังนี้
Object Oriented Programming Handling Exceptions
Method of Class อ.สุพจน์ สิงหัษฐิต
การเขียนโปรแกรม JAVA ขั้นพื้นฐาน
Nattapong Songneam BankAccount – Example Nattapong Songneam
การสร้าง WebPage ด้วย Java Script Wachirawut Thamviset.
Object-Oriented Programming with Java Burapha University, 2001 Java Exceptions Week #9 Jarungjit Parnjai.
Burapha University, 2001 Object-Oriented Analysis and Design Design Patterns Iterator Week #11 Jarungjit Parnjai.
Lecture 7 Java Exceptions. Errors  Compile-time Errors  เกิดขึ้นระหว่าง compile ตรวจสอบได้ด้วย Compiler  เช่น ผิดหลักไวยากรณ์  Run-time Error  เกิดขึ้นระหว่างประมวลผล.
บทที่ 3 Class and Object (2).
หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรที่ ๑ ทักษะการโปรแกรม เบื้องต้น วันที่สาม.
บทที่ 2 การแสดงผลและรับข้อมูล
บทที่ 4 คำสั่งควบคุมแบบมีทางเลือก
บทที่ 5 คำสั่งควบคุม แบบวนซ้ำ รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 5.
Java collection framework
TECH30201 Object-Oriented Programming
การจัดการกับความผิดปกติ
Chapter 6 Abstract Class and Interface
1 exit() and break C++ provides a way to leave a program early (before its natural finish) with the exit() function. The format of exit() is as follows:
การเขียนโปรแกรมบนมาตรฐานเปิด โครงสร้างโปรแกรม public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World”);
Object and classes.
การประมวลผลแบบวน ( LOOP )
Package การสร้าง Package การใช้งาน Package อ.ธวัฒน์ชัย.
Method and Encapsulation
การเขียนโปรแกรมภาษา Java (ต่อ)
โครงสร้างของโปรแกรมเกมคอมพิวเตอร์
การเขียนโปรแกรมคอมพิวเตอร์ แบบภาษาเชิงวัตถุ
ใบสำเนางานนำเสนอ:

Thread boonrit@feu.ac.th

Thread ส่วนของ process ที่ให้ CPU ประมวลผล

Creating and Running Threads in Java สร้าง instance ของ Thread object เรียก start() method ในการสั่งให้ thread ทำงาน Thread myThread = new Thread(); myThread.start();

การสร้าง Thread โดยวิธีการ สืบทอดมาจาก Thread class ทำการ override run() method public class MyThread extends Thread { public void run() { System.out.println("Do something cool here."); } Thread myThread = new MyThread(); myThread.start();

การสร้าง Thread โดยวิธีการ สืบทอดมาจาก Thread class public class NumberThread extends Thread { int num; public NumberThread(int n) { num = n; } public void run() { for (int k=0; k < 10; k++) { System.out.print(num); } // for } // run() } // NumberThread class

การสร้าง Thread โดยวิธีการ สืบทอดมาจาก Thread class public class Numbers { public static void main(String args[]) { // 5 threads NumberThread number1, number2, number3, number4, number5; // Create and start each thread number1 = new NumberThread(1); number1.start(); number2 = new NumberThread(2); number2.start(); number3 = new NumberThread(3); number3.start(); number4 = new NumberThread(4); number4.start(); number5 = new NumberThread(5); number5.start(); } // main() } // Numbers class ผลลัพธ์ 11111111112222222222333333333344444444445555555555

การสร้าง Thread โดยวิธีการ สืบทอดมาจาก Thread class

การสร้าง Thread โดยวิธีการ สืบทอดมาจาก Thread class 111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111112222222 222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222223333333333333333333333333 333333333333333333333333333333333333333333333333333333333333333333333 333333333333333333333333333444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444 444444444455555555555555555555555555555555555555555555555555555555555 555555555555555555555555555555555555555555555555555555555555552222222 222233333333333333333333333333333333333333333333333333333333333333333 333333333333334444444444444444444444444444445555555555555555555555555 555555555555555555555555555555555555555555555555555555444444444444444 4444444444444444444444444444444444

การสร้าง Thread โดยวิธีการ Implementing the Runnable Interface public class MyClass extends SomeOtherClass implements Runnable { public MyClass() { Thread thread = new Thread(this); thread.start(); } public void run() { System.out.println("Do something cool here.");

การสร้าง Thread โดยวิธีการ Implementing the Runnable Interface

การสร้าง Thread โดยวิธีการ Implementing the Runnable Interface public class NumberPrinter implements Runnable { int num; public NumberPrinter(int n) { num = n; } public void run() { for (int k=0; k < 10; k++) System.out.print(num); } // run() } // NumberPrinter class

การสร้าง Thread โดยวิธีการ Implementing the Runnable Interface public class Numbers { public static void main(String args[]) { Thread number1, number2, number3, number4, number5; // Create and start each thread number1 = new Thread(new NumberPrinter(1)); number1.start(); number2 = new Thread(new NumberPrinter(2)); number2.start(); number3 = new Thread(new NumberPrinter(3)); number3.start(); number4 = new Thread(new NumberPrinter(4)); number4.start(); number5 = new Thread(new NumberPrinter(5)); number5.start(); } // main() } // Numbers class

Thread Priority ใช้ setPriority(n) เป็นการกำหนดลำดับความสำคัญของ Thread โดยที่ Thread ที่มีการกำหนด Priority สูงจะมีโอกาสที่จะได้รับการประมวลผลก่อน และนานกว่า Thread ที่มี Priority ต่ำกว่า n มีค่าระหว่าง 0-10 public NumberThread(int n) { num = n; setPriority(n); }

Sleep Threads เป็นการให้ Thread หยุดรอในเวลาที่กำหนด โดยที่ หน่วยเป็น millisecond Thread.sleep(1000); //หยุด 1 วินาที try { sleep(100); } catch (InterruptedException e) { System.out.println(e.getMessage()); }

Sleepy Threads public void run() { for (int k=0; k < 10; k++) { try { Thread.sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) { System.out.println(e.getMessage()); } System.out.print(num); } // for } // run()

Thread States and Life Cycle

suspend() and resume() suspend() สั่งให้ thread หยุดทำงานและเข้าสู่สถานะ blocked resume() ให้ thread เข้าสู่สถานะ ready

Suspend() and resume()

Suspend() and resume() public void test() { MyThread_subpend t1=new MyThread_subpend("A"); MyThread_subpend t2=new MyThread_subpend("B"); t1.start(); t2.start(); try{ Thread.sleep(200); t1.suspend(); Thread.sleep(1000); t1.resume(); }catch(InterruptedException e){} } ABBABBBBBBBBBBABABABABABABABABAAAAAAAAAA

join() หยุดรอ Thread ลูกให้ทำงานจบก่อน ผลลัพธ์ public class Numbers { public static void main(String args[]) { // 5 threads NumberThread number1, number2, number3, number4, number5; // Create and start each thread number1 = new NumberThread(1); number1.start(); number2 = new NumberThread(2); number2.start(); try{ number1.join();number2.join(); }catch(InteruptedException e{} System.out.print(“\nMain stop”); } // main() } // Numbers class ผลลัพธ์ 11111111112222222222 Main stop

stop สั่งให้ Thread หยุดทำงาน public void run() { try{ while(true) sleep(1000); System.out.println("running"); } }catch(ThreadDeath e){ System.out.print("Killed"); catch(InterruptedException ee){} สั่งให้ Thread หยุดทำงาน

stop public void test(){ MyThreadStop t=new MyThreadStop(); t.start(); try { Thread.sleep(4000); } catch (InterruptedException e) { } t.stop(); running Killed

Daemon เป็นการกำหนด Thread ลูกให้ถูกทำลายเมื่อ Thread แม่จบการทำงาน

Daemon

Daemon public static void main(String[] args) { Main Stop public static void main(String[] args) { MyThreadDeamon t1=new MyThreadDeamon("A"); MyThreadDeamon t2=new MyThreadDeamon("B"); t1.setDaemon(true); t2.setDaemon(true); t1.start(); t2.start(); try { Thread.sleep(4000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.print("Main Stop");

Synchronization Why Synchronization public class Game { private int playerX; private int playerY; public boolean isAtExit() { return (playerX == 0 && playerY == 0); } public void setPosition(int x, int y) { playerX = x; playerY = y; Let's say you're creating a xxxx game. Any thread can set the position of the player, and any thread can check to see if the player is at the exit. For simplicity, let's say the exit is at position x = 0, y = 0.

Synchronization Starting off, the object's variables are playerX = 1 and playerY = 0. Thread A calls setPosition(0,1). The line playerX = x; is executed. Now playerX = 0. Thread A is pre-empted by Thread B. Thread B calls isAtExit(). Currently, playerX = 0 and playerY = 0, so isAtExit() returns true!

Synchronization public class Game { private int playerX; private int playerY; public synchronized boolean isAtExit() { return (playerX == 0 && playerY == 0); } public synchronized void setPosition(int x, int y) { playerX = x; playerY = y;

Synchronization public synchronized void setPosition(int x, int y) { playerX = x; playerY = y; } is essentially the same as this: public void setPosition(int x, int y) { synchronized(this) {

Synchronization public void myMethod() { synchronized(this) { // code that needs to be synchronized } // code that is already thread-safe

wait() notify() notifyAll() wait() เป็นการสั้งให้ thread หยุดทำงานไปอยู่ในสภาวะ block notify() ในการให้ THREAD กลับเข้ามาทำงานอีกครั้ง

wait() notify() notifyAll() //not use wait and notify // Thread A public void waitForMessage() { while (hasMessage == false) { Thread.sleep(100); } // Thread B public void setMessage(String message) { ... hasMessage = true;

wait() notify() notifyAll() Here's the updated message code: // Thread A public synchronized void waitForMessage() { try { wait(); } catch (InterruptedException ex) { } // Thread B public synchronized void setMessage(String message) { ... notify(); You can also choose to wait for a maximum amount of time. The wait() method can take a maximum amount of time to wait as a parameter: wait(100);

public class DataIO { String data=""; public synchronized void setData(String data) { this.data=data; notify(); } public synchronized void sentData() throws InterruptedException if(data.equals("")) wait(); System.out.print(data); data="";

public class OutData extends Thread{ DataIO dataio; public OutData(DataIO dataio) { this.dataio=dataio; } public void run() while(true) try { dataio.sentData(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();

public class MainClass { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub DataIO dataio=new DataIO(); Thread outdata=new OutData(dataio); outdata.setDaemon(true); outdata.start(); while(true) { String d=JOptionPane.showInputDialog("Data"); if(d.equals("exit")) break; dataio.setData(d); }