Thứ Năm, 28 tháng 2, 2019

Đào tạo java - Java - Khái niệm cơ bản về ứng dụng

Một applet là một chương trình Học lập trình Java chạy trong trình duyệt Web. Một applet có thể là một ứng dụng Java đầy đủ chức năng vì nó có toàn bộ API Java.

Có một số khác biệt quan trọng giữa một applet và một ứng dụng Java độc lập, bao gồm cả những điều sau đây

Một applet là một lớp Java mở rộng lớp java.applet.Applet.


Một phương thức main () không được gọi trên một applet và một lớp applet sẽ không định nghĩa main ().

Các ứng dụng được thiết kế để được nhúng trong một trang HTML.

Khi người dùng xem một trang HTML có chứa một applet, mã cho applet sẽ được tải xuống máy của người dùng.

Học lập trình java chuyên nghiệp
Học lập trình java chuyên nghiệp

Cần có một JVM để xem một applet. JVM có thể là một trình cắm thêm của trình duyệt Web hoặc môi trường thời gian chạy riêng biệt.

JVM trên máy của người dùng tạo một thể hiện của lớp applet và gọi các phương thức khác nhau trong suốt vòng đời của applet.

Applet có các quy tắc bảo mật nghiêm ngặt được thi hành bởi trình duyệt Web. Bảo mật của một applet thường được gọi là bảo mật hộp cát, so sánh applet với một đứa trẻ đang chơi trong hộp cát với các quy tắc khác nhau phải được tuân theo.

Các lớp khác mà applet cần có thể được tải xuống trong một tệp Lưu trữ Học lập trình Java(JAR).

Vòng đời của một Applet


Bốn phương thức trong lớp Applet cung cấp cho bạn khung mà bạn xây dựng bất kỳ applet nghiêm túc nào

init - Phương pháp này dành cho bất kỳ khởi tạo nào là cần thiết cho applet của bạn. Nó được gọi sau khi các thẻ param bên trong thẻ applet đã được xử lý.

bắt đầu - Phương thức này được gọi tự động sau khi trình duyệt gọi phương thức init. Nó cũng được gọi bất cứ khi nào người dùng quay trở lại trang có chứa applet sau khi chuyển sang các trang khác.

dừng - Phương thức này được gọi tự động khi người dùng di chuyển khỏi trang mà applet nằm. Do đó, nó có thể được gọi nhiều lần trong cùng một applet.

hủy - Phương thức này chỉ được gọi khi trình duyệt tắt bình thường. Vì các applet có nghĩa là sống trên một trang HTML, thông thường bạn không nên để lại tài nguyên sau khi người dùng rời khỏi trang có chứa applet.

paint - Được gọi ngay sau phương thức start () và bất cứ lúc nào applet cần tự sơn lại trong trình duyệt. Phương thức paint () thực sự được kế thừa từ java.awt.

Một Applet "Xin chào, Thế giới"


Sau đây là một applet đơn giản có tên HelloWorldApplet.java -
import java.applet.*;
import java.awt.*;

public class HelloWorldApplet extends Applet {
   public void paint (Graphics g) {
      g.drawString ("Hello World", 25, 50);
   }
}
Các báo cáo nhập này đưa các lớp vào phạm vi của lớp applet của chúng tôi

java.applet.Applet

java.awt.Graphics

Nếu không có các câu lệnh nhập đó, trình biên dịch Học lập trình Java sẽ không nhận ra các lớp Applet và Graphics mà lớp applet đề cập đến.

Lớp học Applet


Mỗi applet là một phần mở rộng của lớp java.applet.Applet . Lớp Applet cơ sở cung cấp các phương thức mà lớp Applet dẫn xuất có thể gọi để lấy thông tin và dịch vụ từ ngữ cảnh trình duyệt.

Chúng bao gồm các phương thức thực hiện như sau

Nhận thông số applet

Lấy vị trí mạng của tệp HTML có chứa applet

Lấy vị trí mạng của thư mục lớp applet

In một thông điệp trạng thái trong trình duyệt

Lấy một hình ảnh

Tìm nạp clip âm thanh

Phát một đoạn âm thanh

Thay đổi kích thước các applet

Ngoài ra, lớp Applet cung cấp một giao diện mà người xem hoặc trình duyệt có được thông tin về applet và kiểm soát việc thực thi của applet. Người xem có thể

Yêu cầu thông tin về tác giả, phiên bản và bản quyền của applet

Yêu cầu mô tả các tham số mà applet nhận ra

Khởi tạo applet

Phá hủy các applet

Bắt đầu thực hiện applet

Dừng hành quyết của applet

Lớp Applet cung cấp các cài đặt mặc định của từng phương thức này. Những triển khai có thể được ghi đè khi cần thiết.

Applet "Hello, World" đã hoàn thành. Phương pháp duy nhất được ghi đè là phương pháp sơn.

Gọi một Applet


Một applet có thể được gọi bằng cách nhúng các lệnh trong tệp HTML và xem tệp thông qua trình xem applet hoặc trình duyệt hỗ trợ Học lập trình Java.

Thẻ <applet> là cơ sở để nhúng một applet trong tệp HTML. Sau đây là một ví dụ gọi ra applet "Hello, World" 
<html>
   <title>The Hello, World Applet</title>
   <hr>
   <applet code = "HelloWorldApplet.class" width = "320" height = "120">
      If your browser was Java-enabled, a "Hello, World"
      message would appear here.
   </applet>
   <hr>
</html>

Lưu ý - Bạn có thể tham khảo Thẻ Applet HTML để hiểu thêm về cách gọi applet từ HTML.

Thuộc tính mã của thẻ <applet> là bắt buộc. Nó chỉ định lớp Applet để chạy. Chiều rộng và chiều cao cũng được yêu cầu để xác định kích thước ban đầu của bảng điều khiển trong đó một applet chạy. Chỉ thị applet phải được đóng bằng thẻ </ applet>.

Nếu một applet lấy tham số, các giá trị có thể được truyền cho các tham số bằng cách thêm các thẻ <param> giữa <applet> và </ applet>. Trình duyệt bỏ qua văn bản và các thẻ khác giữa các thẻ applet.

Các trình duyệt không hỗ trợ Java không xử lý <applet> và </ applet>. Do đó, mọi thứ xuất hiện giữa các thẻ, không liên quan đến applet, đều hiển thị trong các trình duyệt không hỗ trợ Java.

Trình xem hoặc trình duyệt tìm mã Học lập trình Java được biên dịch tại vị trí của tài liệu. Để chỉ định khác, sử dụng thuộc tính codebase của thẻ <applet> như được hiển thị

<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
   width = "320" height = "120">

Nếu một applet nằm trong một gói khác với mặc định, gói giữ phải được chỉ định trong thuộc tính mã bằng cách sử dụng ký tự dấu chấm (.) Để tách các thành phần gói / lớp. Ví dụ:

<applet  = "mypackage.subpackage.TestApplet.class" 
   width = "320" height = "120">

Lấy thông số Applet

Ví dụ sau minh họa cách tạo một applet đáp ứng các tham số thiết lập được chỉ định trong tài liệu. Applet này hiển thị một mô hình bàn cờ màu đen và màu thứ hai.

Màu thứ hai và kích thước của mỗi ô vuông có thể được chỉ định làm tham số cho applet trong tài liệu.

CheckerApplet lấy tham số của nó trong phương thức init (). Nó cũng có thể nhận được các tham số của nó trong phương thức paint (). Tuy nhiên, nhận được các giá trị và lưu cài đặt một lần khi bắt đầu applet, thay vì mỗi lần làm mới, lại thuận tiện và hiệu quả.

Trình xem applet hoặc trình duyệt gọi phương thức init () của mỗi applet mà nó chạy. Người xem gọi init () một lần, ngay sau khi tải applet. (Applet.init () được triển khai để không làm gì cả.) Ghi đè cài đặt mặc định để chèn mã khởi tạo tùy chỉnh.

Phương thức Applet.getParameter () tìm nạp một tham số cho tên của tham số (giá trị của tham số luôn là một chuỗi). Nếu giá trị là số hoặc dữ liệu không phải ký tự khác, chuỗi phải được phân tích cú pháp.

Sau đây là bộ xương của CheckerApplet.java
import java.applet.*;
import java.awt.*;

public class CheckerApplet extends Applet {
   int squareSize = 50;   // initialized to default size
   public void init() {}
   private void parseSquareSize (String param) {}
   private Color parseColor (String param) {}
   public void paint (Graphics g) {}
}
Dưới đây là các phương thức init () và parseSapesSize () của CheckerApplet
public void init () {
   String squareSizeParam = getParameter ("squareSize");
   parseSquareSize (squareSizeParam);
   
   String colorParam = getParameter ("color");
   Color fg = parseColor (colorParam);
   
   setBackground (Color.black);
   setForeground (fg);
}

private void parseSquareSize (String param) {
   if (param == null) return;
   try {
      squareSize = Integer.parseInt (param);
   } catch (Exception e) {
      // Let default value remain
   }
}
Applet gọi parseSapesSize () để phân tích tham số SquareSize. parseSapesSize () gọi phương thức thư viện Integer.parseInt (), phân tích cú pháp một chuỗi và trả về một số nguyên. Integer.parseInt () đưa ra một ngoại lệ bất cứ khi nào đối số của nó không hợp lệ.

Do đó, parseSapesSize () nắm bắt các ngoại lệ, thay vì cho phép các applet thất bại với đầu vào xấu.

Applet gọi parseColor () để phân tích tham số màu thành giá trị Color. parseColor () thực hiện một loạt các phép so sánh chuỗi để khớp giá trị tham số với tên của một màu được xác định trước. Bạn cần thực hiện các phương pháp này để làm cho applet này hoạt động.

Chỉ định tham số Applet


Sau đây là một ví dụ về tệp HTML có CheckerApplet được nhúng trong đó. Tệp HTML chỉ định cả hai tham số cho applet bằng thẻ <param>.
<html>
   <title>Checkerboard Applet</title>
   <hr>
   <applet code = "CheckerApplet.class" width = "480" height = "320">
      <param name = "color" value = "blue">
      <param name = "squaresize" value = "30">
   </applet>
   <hr>
</html>
Lưu ý - Tên tham số không phân biệt chữ hoa chữ thường.

Chuyển đổi ứng dụng thành Applet


Thật dễ dàng để chuyển đổi một ứng dụng Học lập trình Java đồ họa (nghĩa là một ứng dụng sử dụng AWT và bạn có thể bắt đầu với trình khởi chạy chương trình Java) thành một applet mà bạn có thể nhúng vào một trang web.

Sau đây là các bước cụ thể để chuyển đổi một ứng dụng thành một applet.

Tạo một trang HTML với thẻ thích hợp để tải mã applet.

Cung cấp một lớp con của lớp JApplet. Làm cho lớp này công khai. Nếu không, các applet không thể được tải.

Loại bỏ phương pháp chính trong ứng dụng. Không xây dựng một cửa sổ khung cho ứng dụng. Ứng dụng của bạn sẽ được hiển thị bên trong trình duyệt.

Di chuyển bất kỳ mã khởi tạo nào từ hàm tạo của cửa sổ khung sang phương thức init của applet. Bạn không cần phải xây dựng rõ ràng đối tượng applet. Trình duyệt khởi tạo nó cho bạn và gọi phương thức init.

Xóa cuộc gọi đến setSize; đối với các applet, việc định cỡ được thực hiện với các tham số chiều rộng và chiều cao trong tệp HTML.

Xóa cuộc gọi đến setDefaultCloseOperation. Một applet không thể được đóng lại; nó chấm dứt khi trình duyệt thoát.

Nếu ứng dụng gọi setTitle, hãy loại bỏ cuộc gọi đến phương thức. Applet không thể có thanh tiêu đề. (Tất nhiên, bạn có thể tự đặt tiêu đề cho trang web bằng cách sử dụng thẻ tiêu đề HTML.)

Đừng gọi setVisible (true). Các applet được hiển thị tự động.

Xử lý sự kiện


Applet kế thừa một nhóm các phương thức xử lý sự kiện từ lớp Container. Lớp Container định nghĩa một số phương thức, chẳng hạn như processKeyEvent và processMouseEvent, để xử lý các loại sự kiện cụ thể và sau đó một phương thức bắt tất cả được gọi là processEvent.

Để phản ứng với một sự kiện, một applet phải ghi đè lên phương thức dành riêng cho sự kiện.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;

public class ExampleEventHandling extends Applet implements MouseListener {
   StringBuffer strBuffer;

   public void init() {
      addMouseListener(this);
      strBuffer = new StringBuffer();
      addItem("initializing the apple ");
   }

   public void start() {
      addItem("starting the applet ");
   }

   public void stop() {
      addItem("stopping the applet ");
   }

   public void destroy() {
      addItem("unloading the applet");
   }

   void addItem(String word) {
      System.out.println(word);
      strBuffer.append(word);
      repaint();
   }

   public void paint(Graphics g) {
      // Draw a Rectangle around the applet's display area.
      g.drawRect(0, 0, 
      getWidth() - 1,
      getHeight() - 1);

      // display the string inside the rectangle.
      g.drawString(strBuffer.toString(), 10, 20);
   }

   
   public void mouseEntered(MouseEvent event) {
   }
   public void mouseExited(MouseEvent event) {
   }
   public void mousePressed(MouseEvent event) {
   }
   public void mouseReleased(MouseEvent event) {
   }
   public void mouseClicked(MouseEvent event) {
      addItem("mouse clicked! ");
   }
}
Bây giờ, chúng ta hãy gọi applet này như sau
<html>
   <title>Event Handling</title>
   <hr>
   <applet code = "ExampleEventHandling.class" 
      width = "300" height = "300">
   </applet>
   <hr>
</html>
Ban đầu, applet sẽ hiển thị "khởi tạo applet. Bắt đầu applet." Sau đó, khi bạn nhấp vào bên trong hình chữ nhật, "chuột nhấp chuột" cũng sẽ được hiển thị.

Hiển thị hình ảnh


Một applet có thể hiển thị hình ảnh có định dạng GIF, JPEG, BMP và các định dạng khác. Để hiển thị một hình ảnh trong applet, bạn sử dụng phương thức drawImage () được tìm thấy trong lớp Học lập trình Java.

Sau đây là một ví dụ minh họa tất cả các bước để hiển thị hình ảnh -
import java.applet.*;
import java.awt.*;
import java.net.*;

public class ImageDemo extends Applet {
   private Image image;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String imageURL = this.getParameter("image");
      if(imageURL == null) {
         imageURL = "java.jpg";
      }
      try {
         URL url = new URL(this.getDocumentBase(), imageURL);
         image = context.getImage(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         // Display in browser status bar
         context.showStatus("Could not load image!");
      }
   }
   
   public void paint(Graphics g) {
      context.showStatus("Displaying image");
      g.drawImage(image, 0, 0, 200, 84, null);
      g.drawString("www.javalicense.com", 35, 100);
   }  
}
Bây giờ, chúng ta hãy gọi applet này như sau
<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "300" height = "200">
      <param name = "image" value = "java.jpg">
   </applet>
   <hr>
</html>

Chơi âm thanh


Một applet có thể phát một tệp âm thanh được đại diện bởi giao diện AudioClip trong gói java.applet. Giao diện AudioClip có ba phương thức, bao gồm

public void play () - Phát clip âm thanh một lần, từ đầu.

public void loop () - Làm cho clip âm thanh phát lại liên tục.

public void stop () - Dừng phát clip âm thanh.

Để có được một đối tượng AudioClip, bạn phải gọi phương thức getAudioClip () của lớp Applet. Phương thức getAudioClip () trả về ngay lập tức, cho dù URL có phân giải thành tệp âm thanh thực tế hay không. Tệp âm thanh không được tải xuống cho đến khi thực hiện một nỗ lực để phát đoạn âm thanh.

Sau đây là một ví dụ minh họa tất cả các bước để phát âm thanh
import java.applet.*;
import java.awt.*;
import java.net.*;

public class AudioDemo extends Applet {
   private AudioClip clip;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String audioURL = this.getParameter("audio");
      if(audioURL == null) {
         audioURL = "default.au";
      }
      try {
         URL url = new URL(this.getDocumentBase(), audioURL);
         clip = context.getAudioClip(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         context.showStatus("Could not load audio file!");
      }
   }
   
   public void start() {
      if(clip != null) {
         clip.loop();
      }
   }
   
   public void stop() {
      if(clip != null) {
         clip.stop();
      }
   }
}
Bây giờ, chúng ta hãy gọi applet này như sau
<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "0" height = "0">
      <param name = "audio" value = "test.wav">
   </applet>
   <hr>
</html>
Bạn có thể sử dụng test.wav trên PC để kiểm tra ví dụ trên.

Thứ Tư, 27 tháng 2, 2019

Đào tạo java - Java - Đa luồng

Khóa đào tạo Java là ngôn ngữ lập trình đa luồng , có nghĩa là chúng ta có thể phát triển chương trình đa luồng bằng Java.

Một chương trình đa luồng chứa hai hoặc nhiều phần có thể chạy đồng thời và mỗi phần có thể xử lý một tác vụ khác nhau đồng thời sử dụng tối ưu các tài nguyên có sẵn đặc biệt khi máy tính của bạn có nhiều CPU.

Học lập trình Java chuyên nghiệp
Học lập trình Java chuyên nghiệp

Theo định nghĩa, đa nhiệm là khi nhiều quy trình chia sẻ các tài nguyên xử lý chung như CPU. Đa luồng mở rộng ý tưởng đa nhiệm vào các ứng dụng trong đó bạn có thể chia các hoạt động cụ thể trong một ứng dụng thành các luồng riêng lẻ.

Mỗi luồng có thể chạy song song. HĐH phân chia thời gian xử lý không chỉ giữa các ứng dụng khác nhau, mà còn giữa từng luồng trong một ứng dụng Khóa đào tạo Java.

Đa luồng cho phép bạn viết theo cách mà nhiều hoạt động có thể tiến hành đồng thời trong cùng một chương trình.

Vòng đời của một chủ đề


Một chủ đề trải qua các giai đoạn khác nhau trong vòng đời của nó. Ví dụ, một chủ đề được sinh ra, bắt đầu, chạy và sau đó chết. Sơ đồ sau đây cho thấy vòng đời hoàn chỉnh của một luồng.

Sau đây là các giai đoạn của vòng đời


Mới - Một luồng mới bắt đầu vòng đời của nó ở trạng thái mới. Nó vẫn ở trạng thái này cho đến khi chương trình bắt đầu chuỗi. Nó cũng được gọi là một chủ đề sinh ra .

Runnable - Sau khi một chủ đề mới được bắt đầu, chủ đề sẽ trở thành runnable. Một chủ đề trong trạng thái này được coi là thực hiện nhiệm vụ của nó.

Chờ đợi - Đôi khi, một luồng chuyển sang trạng thái chờ trong khi luồng chờ một luồng khác thực hiện một tác vụ. Một luồng chuyển đổi trở lại trạng thái có thể chạy chỉ khi một luồng khác báo hiệu luồng chờ để tiếp tục thực thi.

Thời gian chờ đợi - Một chuỗi có thể chạy có thể vào trạng thái chờ được hẹn giờ trong một khoảng thời gian xác định. Một luồng trong trạng thái này chuyển trở lại trạng thái có thể chạy khi khoảng thời gian đó hết hạn hoặc khi sự kiện nó đang chờ xảy ra.

Đã kết thúc (Chết) - Một chuỗi có thể chạy vào trạng thái kết thúc khi nó hoàn thành nhiệm vụ hoặc kết thúc.

Ưu tiên chủ đề


Mỗi luồng Khóa đào tạo Java có mức độ ưu tiên giúp hệ điều hành xác định thứ tự các luồng được lên lịch.

Các ưu tiên của luồng Java nằm trong phạm vi giữa MIN_PRIORITY (hằng số là 1) và MAX_PRIORITY (hằng số là 10). Theo mặc định, mọi luồng được ưu tiên NORM_PRIORITY (hằng số là 5).

Các luồng có mức độ ưu tiên cao hơn quan trọng hơn đối với chương trình và nên được phân bổ thời gian xử lý trước các luồng có mức độ ưu tiên thấp hơn. Tuy nhiên, các ưu tiên của luồng không thể đảm bảo thứ tự thực hiện các luồng và phụ thuộc rất nhiều vào nền tảng.

Tạo một chủ đề bằng cách triển khai một giao diện có thể chạy

Nếu lớp của bạn dự định được thực thi như một luồng thì bạn có thể đạt được điều này bằng cách thực hiện giao diện Runnable . Bạn sẽ cần phải làm theo ba bước cơ bản -

Bước 1

Bước đầu tiên, bạn cần triển khai phương thức run () được cung cấp bởi giao diện Runnable . Phương thức này cung cấp một điểm vào cho luồng và bạn sẽ đặt logic nghiệp vụ hoàn chỉnh của mình vào bên trong phương thức này. Sau đây là một cú pháp đơn giản của phương thức run ()

public void run( )

Bước 2

Bước thứ hai, bạn sẽ khởi tạo một đối tượng Thread bằng cách sử dụng hàm tạo sau

Thread(Runnable threadObj, String threadName); 

Trong đó, threadObj là một thể hiện của một lớp thực hiện giao diện Runnable và threadName là tên được đặt cho luồng mới.

Bước 3

Khi một đối tượng Thread được tạo, bạn có thể khởi động nó bằng cách gọi phương thức start () , thực thi một phương thức gọi để chạy (). Sau đây là một cú pháp đơn giản của phương thức start ()

void start();

Dưới đây là một ví dụ tạo ra một chủ đề mới và bắt đầu chạy nó
class RunnableDemo implements Runnable {
   private Thread t;
   private String threadName;
   
   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
      } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}

public class TestThread {

   public static void main(String args[]) {
      RunnableDemo R1 = new RunnableDemo( "Thread-1");
      R1.start();
      
      RunnableDemo R2 = new RunnableDemo( "Thread-2");
      R2.start();
   }   
}
Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

Tạo một chủ đề bằng cách mở rộng một lớp chủ đề

Cách thứ hai để tạo một luồng là tạo một lớp mới mở rộng lớp Thread bằng hai bước đơn giản sau. Cách tiếp cận này cung cấp sự linh hoạt hơn trong việc xử lý nhiều luồng được tạo bằng các phương thức có sẵn trong lớp Thread.

Bước 1

Bạn sẽ cần ghi đè phương thức run () có sẵn trong lớp Thread. Phương thức này cung cấp một điểm vào cho luồng và Khóa đào tạo Java sẽ đặt logic nghiệp vụ hoàn chỉnh của mình vào bên trong phương thức này. Sau đây là một cú pháp đơn giản của phương thức run () -
public void run( )

Bước 2

Khi đối tượng Thread được tạo, bạn có thể khởi động nó bằng cách gọi phương thức start () , thực thi một phương thức gọi để chạy (). Sau đây là một cú pháp đơn giản của phương thức start ()
void start( );

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

Phương pháp chủ đề

Sau đây là danh sách các phương thức quan trọng có sẵn trong lớp Thread.

Sr.Không.Phương pháp & Mô tả
1khoảng trống công khai bắt đầu ()

Bắt đầu luồng trong một đường dẫn thực hiện riêng biệt, sau đó gọi phương thức run () trên đối tượng Thread này.
2công khai void run ()

Nếu đối tượng Thread này được khởi tạo bằng cách sử dụng một mục tiêu Runnable riêng biệt, phương thức run () được gọi trên đối tượng Runnable đó.
3chung kết void setName (Tên chuỗi)

Thay đổi tên của đối tượng Thread. Ngoài ra còn có một phương thức getName () để lấy tên.
4chung kết void setP Warriority (ưu tiên int)
Đặt mức độ ưu tiên của đối tượng Thread này. Các giá trị có thể nằm trong khoảng từ 1 đến 10.
5chung kết void setDaemon (boolean on)
Một tham số của true biểu thị Chủ đề này là một chủ đề daemon.
6chung cuộc void void tham gia (millisec dài)
Chuỗi hiện tại gọi phương thức này trên luồng thứ hai, khiến luồng hiện tại bị chặn cho đến khi luồng thứ hai kết thúc hoặc số mili giây được chỉ định đi qua.
7ngắt khoảng trống công cộng ()
Làm gián đoạn luồng này, khiến nó tiếp tục thực thi nếu nó bị chặn vì bất kỳ lý do nào.
số 8boolean cuối cùng công khai isAlive ()

Trả về true nếu luồng còn sống, đó là bất cứ lúc nào sau khi luồng được bắt đầu nhưng trước khi nó chạy đến khi hoàn thành.
Các phương thức trước được gọi trên một đối tượng Thread cụ thể. Các phương thức sau trong lớp Thread là tĩnh. Gọi một trong các phương thức tĩnh thực hiện thao tác trên luồng hiện đang chạy.

Sr.Không.Phương pháp & Mô tả
1năng suất void static static ()

Làm cho luồng hiện đang chạy mang lại bất kỳ luồng nào có cùng mức độ ưu tiên đang chờ được lên lịch.
2ngủ tĩnh công cộng (millisec dài)
Làm cho luồng hiện đang chạy bị chặn ít nhất là số mili giây đã chỉ định.
3boolean tĩnh giữ khóa (Object x)
Trả về true nếu luồng hiện tại giữ khóa trên Object đã cho.
4công tĩnh Chủ đề currentThread ()
Trả về một tham chiếu đến luồng hiện đang chạy, đó là luồng gọi phương thức này.
5công khai void voidStStack ()
In theo dõi ngăn xếp cho luồng hiện đang chạy, rất hữu ích khi gỡ lỗi một ứng dụng đa luồng.
Chương trình ThreadClassDemo sau đây trình bày một số phương thức của lớp Thread. Hãy xem xét một lớp DisplayMessage thực hiện Runnable

Sau đây là chương trình chính, sử dụng các lớp được xác định ở trên
// File Name : ThreadClassDemo.java
public class ThreadClassDemo {

   public static void main(String [] args) {
      Runnable hello = new DisplayMessage("Hello");
      Thread thread1 = new Thread(hello);
      thread1.setDaemon(true);
      thread1.setName("hello");
      System.out.println("Starting hello thread...");
      thread1.start();
      
      Runnable bye = new DisplayMessage("Goodbye");
      Thread thread2 = new Thread(bye);
      thread2.setPriority(Thread.MIN_PRIORITY);
      thread2.setDaemon(true);
      System.out.println("Starting goodbye thread...");
      thread2.start();

      System.out.println("Starting thread3...");
      Thread thread3 = new GuessANumber(27);
      thread3.start();
      try {
         thread3.join();
      } catch (InterruptedException e) {
         System.out.println("Thread interrupted.");
      }
      System.out.println("Starting thread4...");
      Thread thread4 = new GuessANumber(75);
      
      thread4.start();
      System.out.println("main() is ending...");
   }
}
Điều này sẽ tạo ra kết quả sau đây. Bạn có thể thử lại ví dụ này nhiều lần và bạn sẽ nhận được một kết quả khác nhau mỗi lần.

Đầu ra
Starting hello thread...
Starting goodbye thread...
Hello
Hello
Hello
Hello
Hello
Hello
Goodbye
Goodbye
Goodbye
Goodbye
Goodbye
.......

Các khái niệm đa luồng Khóa đào tạo Java chính

Trong khi thực hiện lập trình Đa luồng trong Java, bạn sẽ cần phải có các khái niệm sau đây rất tiện dụng

Đồng bộ hóa chủ đề là gì?

Xử lý liên lạc giữa các bên

Xử lý bế tắc luồng

Hoạt động chủ đề chính

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...