Bài giảng Lập trình mạng - Bài 2: Giới thiệu sơ lược về ngôn ngữ Java - Bùi Minh Quân

pdf 54 trang ngocly 3010
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình mạng - Bài 2: Giới thiệu sơ lược về ngôn ngữ Java - Bùi Minh Quân", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_mang_bai_2_gioi_thieu_so_luoc_ve_ngon_ng.pdf

Nội dung text: Bài giảng Lập trình mạng - Bài 2: Giới thiệu sơ lược về ngôn ngữ Java - Bùi Minh Quân

  1. Giới thiệu sơ lược về ngôn ngữ Java  Sơ lược về ngôn ngữ Java  Các khái niệm cơ bản  Biên dịch và thực thi dùng JDK  Một số kỹ thuật  Ngoại lệ  Nhập xuất  Thread Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 1
  2. Sơ lược về ngôn ngữ Java  Lịch sử phát triển:  1990: Ngôn ngữ Oak được tạo ra bởi James Gosling trong dự án Green của Sun MicroSystems nhằm phát triển phần mềm cho các thiết bị dân dụng.  1995: Oak đổi tên thành Java.  1996: trở thành chuẩn công nghiệp cho Internet.  Đặc điểm:  Ngôn ngữ hoàn toàn hướng đối tượng (Pure OOP).  Ngôn ngữ đa nền: "Viết một lần , Chạy trên nhiều nền”.  Ngôn ngữ đa luồng (multi-threading): xử lý và tính toán song song.  Ngôn ngữ phân tán (distributed): cho phép các đối tượng của một ứng dụng được phân bố và thực thi trên các máy tính khác nhau.  Ngôn ngữ động: cho phép mã lệnh của một chương trình được tải từ một máy tính về máy của người yêu cầu thực thi chương trình.  Ngôn ngữ an toàn: hạn chế các thao tác nguy hiểm cho máy tính thật.  Ngôn ngữ đơn giản, dễ học, kiến trúc chương trình đơn giản, trong sáng. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 2
  3. Sơ lược về ngôn ngữ Java  Khả năng:  Ngôn ngữ bậc cao.  Có thể được dùng để tạo ra các loại ứng dụng để giải quyết các vấn đề về số, xử lý văn bản, tạo ra trò chơi, và nhiều thứ khác.  Có các thư viện hàm hỗ trợ xây dựng giao diện (GUI) như AWT, Swing,  Có các môi trường lập trình đồ họa như JBuilder, NetBeans, Eclipse,  Có khả năng truy cập dữ liệu từ xa thông qua cầu nối JDBC  Hỗ trợ các lớp hữu ích, tiện lợi trong lập trình các ứng dụng mạng (Socket) cũng như truy xuất Web hay nhúng vào trong trang Web (Applet).  Hỗ trợ lập trình phân tán (Remote Method Invocation) cho phép một ứng dụng có thể được xử lý phân tán trên các máy tính khác nhau.  Lập trình trên thiết bị cầm tay (J2ME).  Xây dựng các ứng dụng trong môi trường xí nghiệp (J2EE).  Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 3
  4. Sơ lược về ngôn ngữ Java  Máy ảo Java: .java Để thực thi một ứng dụng của Java trên một hệ điều hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành đó: .class JRE (Java Runtime Environment) Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 4
  5. Sơ lược về ngôn ngữ Java Java Platform, Standard Edition 7 (Java SE) Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 5
  6. Sơ lược về ngôn ngữ Java  Các kiểu ứng dụng dưới Java Applet: • Ứng dụng được nhúng vào các trang web. • Mã ứng dụng được lấy từ web server Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 6
  7. Sơ lược về ngôn ngữ Java  Các kiểu ứng dụng dưới Java Application: • Ứng dụng được thực thi trên các máy ảo Java. • Bộ thông dịch dịch mã bytecode của ứng dụng thành mã máy đích. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 7
  8. Sơ lược về ngôn ngữ Java  Các kiểu ứng dụng dưới Java Mobile: • Ứng dụng được thực thi trên các máy ảo Java trên điện thoại di động và các thiết bị cầm tay. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 8
  9. Java Development Kit (JDK)  Bộ phát triển ứng dụng java gồm:  javac: Bộ biên dịch chương trình viết bằng ngôn ngữ java thành mã thực thi(byte code) trên máy ảo Java  java (máy ảo java – Java Virtual Machine): Thông dịch mã bytecode của các chương trình kiểu application thành mã thực thi được trên hệ điều hành của máy đích.  appletviewer: Bộ thông dịch thực thi applet.  javadoc: Tạo tài liệu tự động.  jdb: Gở rối.  rmic: Tạo stub cho ứng dụng kiểu RMI.  rmiregistry: Phục vụ tên (Name Server) trong hệ thống RMI  Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 9
  10. Các kiểu dữ liệu  Kiểu số Tªn kiÓu KÝch thíc byte 1 byte short 2 bytes int 4 bytes long 8 bytes float 4 bytes double 8 bytes  Kiểu ký tự char:  2 bytes theo mã UNICODE  127 ký tự đầu trùng với mã ASCII  Kiểu chuỗi String:  Là một lớp trong ngôn ngữ java.  Có nhiều phương thức thao tác trên chuỗi.  Kiểu Boolean:  nhận 2 giá trị true / false Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 10
  11. Mảng  Kiểu mảng:  Khai báo int[] a ; float[] yt; String[] names; hoặc: int a[]; float yt[]; String names[]; int maTran[][]; float bangDiem[][];  Khởi tạo a = new int[3]; yt = new float[10]; names = new String[50]; maTran = new int[10][10];  Sử dụng int i = a[0]; float f = yt[9]; String str = names[20]; int x = matran[0][0]; Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 11
  12. Các phép toán  Phép toán số học: +, - , *, / , % , = ++ , , += , - = , *= , /= , %=  Phép toán logic: = =, !=, && , ||, ! > , = , > , ~  Phép toán điều kiện: ? :  Phép toán chuyển kiểu: (kiểu mới) Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 12
  13. Quy cách đặt tên  Tên phân biệt giữa chữ hoa và chữ thường.  Dùng các chữ cái, ký tự số, ký tự _ và $.  Không bắt đầu bằng ký tự số.  Không có khoảng trắng trong tên.  Quy ước:  Tên lớp:  Các ký tự đầu tiên của một từ được viết Hoa,  Các ký tự còn lại viết thường.  Ví dụ: lớp Nguoi, SinhVien, MonHoc, String, InputStream, . . .  Tên biến, tên hằng, tên phương thức:  Từ đầu tiên viết thường.  Ký tự đầu tiên của từ thứ hai trở đi được viết Hoa.  Ví dụ: ten, ngaySinh, diaChi, inDiaChi(), getInputStream(), . . . Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 13
  14. Java - Ứng dụng kiểu application  Java ngôn ngữ thuần đối tượng (pure object): => Tất cả đều được định nghĩa trong các lớp (class)  Trong một ứng dụng có một lớp thực thi được.  Lớp thực thi được:  Có tên lớp trùng với tên tập tin chứa nó.  Phải khai báo public  Có chứa phương thức được thực thi đầu tiên: public static void main (String argv[]){ . . . }  Nếu nhiều lớp được định nghĩa trong một tâp tin: => chỉ có một lớp được khai báo public. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 14
  15. Ứng dụng kiểu application  Ví dụ ứng dụng kiểu application  Định nghĩa trong lớp HelloWorld  Chứa trong tập tin HelloWorld.java public class HelloWorld { public static void main(String args[]) { System.out.print("Hello World!"); } } Phương thức System.out.print() sẽ in tất cả các tham số trong dấu ngoặc ra màn hình Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 15
  16. Ứng dụng kiểu application  Biên soạn chương trình Java Có thể dùng bất kỳ chương trình soạn thảo văn bản nào. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 16
  17. Ứng dụng kiểu application  Biên soạn chương trình Java Có nhiều các IDE (môi trường phát triển) như NetBeans, Eclipse, JBuilder, rất mạnh để xây dựng ứng dụng Java. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 17
  18. Cài đặt và cấu hình JDK  Cài đặt  Phiên bản: jdk-6u5-windows-i586-p.exe  Thư mục cài đặt: C:\Program Files\Java\jdk1.6.0_05  Cấu hình  Đặt biến môi trường PATH và CLASSPATH  Vào System Properties / Environment Variables: trong phần System Variables, thêm tiếp tục vào đường dẫn PATH C:\Program Files\Java\jdk1.6.0_05\bin;  Click chọn NEW, thêm vào CLASSPATH = .; [Các thư mục hoạt động khác, nếu cần] Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 18
  19. Biên dịch và thực thi chương trình  Biên dịch và thực thi trong Command Prompt  Giả sử thư mục sử dụng là D:\vidujava  Giả sử file nguồn là HelloWorld.java Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 19
  20. Cấu trúc điều khiển  Cấu trúc điều khiển trong Java giống hệt như cấu trúc điều khiển của C++, bao gồm:  Lệnh if-else  Phép toán ? :  Lệnh switch  Lệnh while  Lệnh do – while  Lệnh for  Lệnh break  Lệnh continue Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 20
  21. Một số kỹ thuật  Hiển thị ra màn hình  System.out.print(arg1+ arg2+ + argn)  System.out.println(arg1+ arg2+ + argn): xuống hàng. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 21
  22. Một số kỹ thuật  Nhập 1 ký tự từ bàn phím  System.in.read() trả về một số nguyên là thứ tự trong bảng mã ASCII của ký tự vừa nhập từ bàn phím. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 22
  23. Một số kỹ thuật  Đọc đối số của chương trình  Thực thi java ClassName arg1 arg2 arg3 argn  Các đối số cách nhau khoảng trắng.  main() phải khai báo một tham số kiểu mảng các chuỗi. . Các đối số lần lượt được đặt vào các phần tử của mảng. . Số lượng đối số: truy xuất thuộc tính length của mảng. Giá trị đối số của chương trình được nhận vào theo dạng chuỗi Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 23
  24. Một số kỹ thuật  Đổi chuỗi thành số và số thành chuỗi Đổi chuỗi thành số int i = Integer.valueOf(str).intValue(); long l = Long.valueOf(str).longValue(); float f = Float.valueOf(str).floatValue(); Đổi số thành chuỗi cộng 1 chuỗi rỗng (“”) cho số đó. Ví dụ: int x = 15; float y = 3.14; String str1 = “” + x; String str2 = “” + y; Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 24
  25. Một số kỹ thuật  Đổi chuỗi thành mảng các byte (byte[])  Dùng hàm getBytes() trên chuỗi. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 25
  26. Một số kỹ thuật  Đổi mảng các byte (byte[]) thành chuỗi  String(byte[] b): tạo chuỗi từ tất cả các phần tử trong mảng b[]  String(byte[] b, int offset, int length): Tạo chuỗi bắt đầu tại vị trí offset và chiều dài length từ các phần tử trong mảng b[]. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 26
  27. Cài đặt và sử dụng 1 lớp Cú pháp cài đặt 1 lớp trong Java gần giống cú pháp cài đặt 1 lớp trong C++ Không khai báo thuộc tính truy cập thì mặc nhiên là public trong cùng package (xem như trong cùng thư mục chứa nó). Cú pháp tạo đối tượng: ClassName obj = new ClassName([các tham số]); Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 27
  28. Cài đặt và sử dụng 1 lớp  Cài đặt nhiều lớp trong 1 tập tin • Chỉ có một lớp được khai báo là public • Lớp public sẽ được nhìn thấy (truy xuất được) bởi các lớp khác ở bất kỳ ở đâu. • Lớp public sẽ chứa hàm main(). • Các lớp còn lại mặc nhiên là package-private, nghĩa là có thể truy xuất được từ các lớp trong cùng file hay cùng package (thư mục). Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 28
  29. Thừa kế trong Java  Một lớp chỉ có thể có một lớp cha (thừa kế đơn).  Dùng từ khóa extends để khai báo thừa kế.  Lớp cha được tham khảo từ lớp con bởi từ khóa super. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 29
  30. Ngoại lệ (Exception) trong Java  Ngoại lệ là các lỗi sinh ra từ các "thao tác không chắc chắn“ như:  Mở 1 file không tồn tại  Nối kết mạng không thực hiện được  Nhập, xuất dữ liệu không đúng định dạng  Java bắt buộc các lệnh có thể dẫn đến các lỗi truy xuất (ngoại lệ) phải có các đoạn mã xử lý phòng hờ: try { [ Các thao tác vào ra có thể sinh ra các ngoại lệ ] } catch (KiểuNgoạiLệ01 biến) { [ Ứng xử khi ngoại lệ KiểuNgoaiLệ01 sinh ra ] } catch (KiểuNgoạiLệ02 biến) { [ Ứng xử khi ngoại lệ KiểuNgoaiLệ02 sinh ra ] } finally { [ Công việc luôn luôn được thực hiện ] } Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 30
  31. Ngoại lệ (Exception) trong Java  Ví dụ Chương trình không có phần xử lý ngoại lệ nếu ta không nhập vào đối số dòng lệnh giá trị nào nếu ta nhập vào giá trị không phải là số nguyên Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 31
  32. Ngoại lệ (Exception) trong Java Chương trình có phần xử lý ngoại lệ Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 32
  33. Ngoại lệ (Exception) trong Java  Sơ đồ thừa kế của Exception Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 33
  34. Java – Nhập xuất với Stream  Stream  Stream là một dòng liên tục, có thứ tự các bytes dữ liệu “chảy” giữa chương trình và các thiết bị ngoại vi:  Stream nhập (in): nhận (read) dữ liệu từ thiết bị ngoại vi.  Stream xuất (out): xuất (write) dữ liệu ra thiết bị ngoại vi. Chương trình chỉ làm việc trên các stream nhập và stream xuất, mà không quan tâm đến đặc điểm riêng biệt của Trừu tượng thiết bị ngoại vi nối với Stream. hóa việc xuất nhập Stream bao gồm những bytes rời rạc, không có định dạng cụ thể. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 34
  35. Java – Nhập xuất với Stream  Stream trong Java  2 lớp cơ bản trong gói java.io  java.io.InputStream: Stream nhập  java.io.OutputStream: Stream xuất  Dữ liệu không định dạng: . Nhập xuất theo từng ký tự hoặc . Nhập xuất theo nhiều byte (byte[]).  Các lớp thừa kế từ InputStream và OutputStream:  Cung cấp các tiện ích nhập xuất theo nhiều định dạng.  FileInputStream, PipedInputStream, ObjectInputStream, DataInputStream, BufferedReader,  FileOutputStream, PipedOutputStream, ObjectOutputStream, DataOutputStream, PrintWriter, Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 35
  36. Java – Nhập xuất với Stream  Sơ đồ thừa kế của InputStream Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 36
  37. Java – Nhập xuất với Stream  Sơ đồ thừa kế của OutputStream Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 37
  38. Java – Nhập xuất với Stream  Lớp java.io.InputStream  Các phương thức chính:  public abstract int read() throws IOException: nhận 1 ký tự  public int read(byte b[]) throws IOException: nhận nhiều ký tự  public int read(byte b[], int offset, int len) throws IOException  public int available() throws IOException  public long skip(long n) throws IOException  pubic void close() throws IOException  System.in là một InputStream nối kết với bàn phím.  Nhận các ký tự nhập từ bàn phím.  Thêm 2 ký tự kết thúc là ‘\r’ và ‘\n’ khi nhập xong. => Phải loại bỏ 2 ký tự đó khi sử dụng dữ liệu nhận về. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 38
  39. Java – Nhập xuất với Stream  Ví dụ 1 về java.io.InputStream • Nhập từng ký tự từ bàn phím. • Hiển thị ra màn hình ký tự đó. • Kết thúc khi nhập vào ký tự q Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 39
  40. Java – Nhập xuất với Stream  Ví dụ 2 về java.io.InputStream • Nhập 1 chuỗi ký tự từ bàn phím. • Hiển thị ra màn hình chuỗi ký tự đó. • Kết thúc khi nhập vào chuỗi “EXIT” Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 40
  41. Java – Nhập xuất với Stream  Ví dụ 3 về java.io.InputStream • Đọc nội dung 1 file vào vùng đệm. • Hiển thị ra màn hình nội dung đó. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 41
  42. Java – Nhập xuất với Stream  Lớp java.io.OutputStream  Các phương thức chính:  public abstract void write(int b) throws IOException: xuất ra1 ký tự có giá trị là b  public void write(byte b[]) throws IOException: xuất tất cả byte dữ liệu được lưu trong mảng b[].  public void write(byte b[], int offset, int len) throws IOException  pubic void flush() throws IOException  pubic void close() throws IOException  System.out là một đối tượng thuộc lớp PrintStream (thừa kế từ OutputStream), nối kết với màn hình.  Cho phép xuất ra màn hình nhiều dạng dữ liệu khác nhau.  Có thể sử dụng các phương thức của OutputStream. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 42
  43. Java – Nhập xuất với Stream  Ví dụ về java.io.OutputStream Ghi 1 file với các dạng dữ liệu khác nhau Nội dung file kết quả Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 43
  44. Java – Nhập xuất với Stream  Nhập từ bàn phím 1 chuỗi  Cách 1: Sử dụng lớp InputStream  Nhập vào 1 mảng byte[].  Chuyển đổi từ mảng byte[] thành chuỗi. byte b[] = new byte[100]; // Tạo vùng đệm cho mảng, dự kiến là không quá 100 ký tự int n = System.in.read(b); // Nhập dữ liệu từ bàn phím và lưu vào mảng b[] String str = new String(b, 0, n-2); // Chuyển đổi từ mảng b[] sang chuỗi  Cách 2: Sử dụng lớp thừa kế BufferedReader  Tạo ra 1 đối tượng BufferedReader từ System.in  Sử dụng hàm readLine() để nhập 1 chuỗi (có xuống hàng). BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); // Kết quả nhập từ bàn phím sẽ lưu trong chuỗi str. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 44
  45. Java – Nhập xuất với Stream  Xuất ra 1 chuỗi  Cách 1: Sử dụng lớp OutputStream  Chuyển đổi từ chuỗi cần ghi vào mảng byte[].  Ghi mảng byte[] ra stream xuất. FileOutputStream f2 = new FileOutputStream("C:/Test2.txt"); String str = "Day la chuoi thu 1 can ghi vao file \r\n"; byte b[] = str.getBytes(); // Doi chuoi thanh mang byte[] f2.write(b); f2.close(); Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 45
  46. Java – Nhập xuất với Stream  Xuất ra 1 chuỗi  Cách 2: Sử dụng lớp PrintWriter  Dùng các hàm print, println, để xuất nhiều dạng dữ liệu.  Gọi thêm lệnh flush() để đẩy dữ liệu từ vùng đệm ra ngoài. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 46
  47. Luồng (Thread)  Khái niệm: Trong hệ điều Trong hệ điều hành cổ điển hành hiện đại Đơn vị sử dụng Đơn vị sử CPU là quá dụng CPU là trình (process) luồng (thread) Luồng cung cấp cơ chế tính toán và xử lý song song trong Mỗi quá trình có: các ứng dụng. • Thanh ghi bộ đếm chương trình Mỗi luồng: • Thanh ghi trạng thái • Có riêng bộ đếm chương trình, • Ngăn xếp trạng thái thanh ghi và ngăn xếp. • Không gian địa chỉ riêng • Chia sẻ không gian địa chỉ => Dễ dàng chia sẻ file, hiệu báo Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 47
  48. Luồng (Thread)  Các trạng thái  Tương tự trạng thái của 1 quá trình: đang chạy (running), sẵn sàng (ready), nghẽn (blocked) và kết thúc (Dead).  Mỗi hệ điều hành sẽ có cách cài đặt luồng khác nhau => sẽ có sơ đồ chuyển trạng thái cũng khác nhau. sơ đồ chuyển trạng thái của Thread sử dụng trong hệ điều hành Sun Solaris Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 48
  49. Luồng (Thread)  Ví dụ: so sánh thời gian chạy giữa các giải thuật sắp xếp Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 49
  50. Luồng (Thread)  Luồng trong Java  Luồng là 1 đối tượng thuộc lớp java.lang.Thread.  Một chương trình trong java cài đặt luồng bằng cách tạo ra một lớp con (extends) của lớp java.lang.Thread.  Thread có 3 phương thức cơ bản để điều khiển:  public native synchronized void start()  public void run() : các công việc thực sự của luồng.  public final void stop()  Luồng kết thúc khi:  Tất cả các công việc trong phương thức run() được thực hiện.  Hoặc phương thức stop() được kích hoạt. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 50
  51. Luồng (Thread)  Ví dụ Tạo ra 3 luồng thực thi song song việc đếm số từ 1 đến 50 Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 51
  52. Luồng (Thread)  Luồng trong Java:  Các phương thức khác của lớp java.lang.Thread  public static void sleep(long m) throws InterruptedException: Blocked trong khoảng m ms  public final void suspend(): chuyển từ Ready -> Blocked  public final void resume(): chuyển từ Blocked -> Ready  public final void yield(): chuyển từ Running -> Ready  Các phương thức thừa kế từ java.lang.Object  public void wait(long m) throws InterruptedException: dừng Thread trong m ms xác định  public final void notify(): đánh thức 1 Thread trong hàng đợi  public final void notifyAll(): đánh thức tất cả các Thread trong hàng đợi. Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 52
  53. Luồng (Thread)  Độ ưu tiên của luồng  void setPriority( int x): Đặt độ ưu tiên của luồng là x  int getPriority(): Trả về giá trị ưu tiên của luồng. Thread.MAX_PRIORITY = 10 Thread.NORM_PRIORITY = 5 Thread.MIN_PRIORITY = 1 Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 53
  54. Luồng (Thread)  Đồng bộ hóa các luồng  Trong 1 thời điểm, chỉ có 1 Thread thực thi được phương thức có khai báo thuộc tính synchronized Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ 54