Đối với các lập trình viên Java đã có kinh nghiệm, Thread là công cụ quá quen thuộc. Tuy nhiên với những người mới bắt đầu, để hiểu được Thread là gì, multihreading là gì thì vẫn còn là điều khó khăn. Nếu muốn phát triển các ứng dụng đa luồng trong Java, bạn cần chú trọng học và hiểu về công cụ Thread này. Trong bài viết này, hãy cùng ICANTECH tìm hiểu những điều bạn cần biết về Thread trong Java qua các ví dụ cụ thể.
Thread cho phép thực hiện nhiều luồng cùng một lúc, giúp chương trình hoạt động hiệu quả hơn. Các luồng được sử dụng để thực hiện các tác vụ phức tạp trong nền mà không làm gián đoạn chương trình chính. Trong chương trình, mỗi luồng thực thi độc lập và các luồng có thể chạy song song với nhau. Nếu một luồng gặp lỗi tại thời điểm thực thi thì cũng không ảnh hưởng đến việc thực thi của các luồng khác.
Thread có ưu điểm là nhẹ, có thể cung cấp khả năng liên lạc giữa nhiều luồng khác nhau với chi phí thấp. Đồng thời, Thread trong Java còn có thể thực hiện đa tác vụ trong môi trường bộ nhớ dùng chung một cách hiệu quả.
Đi kèm với khái niệm Thread là gì, bạn cũng cần hiểu multihreading là gì. Như đã nói, một chương trình Java gồm nhiều Thread chạy đồng thời, tất cả các Thread chia sẻ một bộ nhớ chung. Quá trình khi nhiều luồng được thực thi song song cùng lúc được gọi là multihreading (đa luồng). Multi Thread trong Java thường được áp dụng phổ biến khi xây dựng các chương trình trò chơi, animation…
Cũng giống như một tiến trình thông thường, một luồng tồn tại ở nhiều trạng thái. Vậy các trạng thái của Thread là gì, chúng ta sẽ cùng tìm hiểu ngay sau đây.
Bạn có thể chạy Thread trong Java bằng cách sử dụng lớp Thread. Lớp Thread cung cấp các hàm và các phương thức để tạo và thực hiện các thao tác trên một Thread. Lớp này mở rộng một lớp Thread để triển khai Giao diện có thể chạy được. Bạn sẽ sử dụng các hàm sau để tạo Thread:
Hãy xem ví dụ mẫu code cách Thread như sau:
import java.io.*;
import java.util.*;
public class GFG extends Thread {
// initiated run method for Thread
public void run()
{
System.out.println("Thread Started Running...");
}
public static void main(String[] args)
{
GFG g1 = new GFG();
// Invoking Thread using start() method
g1.start();
}
}
Output:
Thread Started Running…
Ví dụ mẫu:
import java.io.*;
import java.util.*;
public class GFG implements Runnable {
// method to start Thread
public void run()
{
System.out.println(
"Thread is Running Successfully");
}
public static void main(String[] args)
{
GFG g1 = new GFG();
// initializing Thread Object
Thread t1 = new Thread(g1);
t1.start();
}
}
Output:
Thread is Running Successfully
import java.util.*;
public class GFG {
public static void main(String args[])
{
// Thread object created
// and initiated with data
Thread t = new Thread("Hello ICANTECH!");
// Thread gets started
t.start();
// getting data of
// Thread through String
String s = t.getName();
System.out.println(s);
}
}
Output:
Hello ICANTECH!
Ví dụ mẫu code:
import java.io.*;
import java.util.*;
public class GFG implements Runnable {
public void run()
{
System.out.println(
"Thread is created and running successfully...");
}
public static void main(String[] args)
{
// aligning GFG Class with
// Runnable interface
Runnable r1 = new GFG();
Thread t1 = new Thread(r1, "My Thread");
// Thread object started
t1.start();
// getting the Thread
// with String Method
String str = t1.getName();
System.out.println(str);
}
}
Output:
My Thread
Thread is created and running successfully…
Chúng ta hãy xem hoạt động của các trạng thái Thread, bằng cách triển khai chúng trên các luồng t1 và t2 qua ví dụ:
import java.util.*;
class GFG implements Runnable {
public void run()
{
// implementing try-catch Block to set sleep state
// for inactive Thread
try {
Thread.sleep(102);
}
catch (InterruptedException i1) {
i1.printStackTrace();
}
System.out.println(
"The state for t1 after it invoked join method() on Thread t2"
+ " " + ThreadState.t1.getState());
// implementing try-catch block
try {
Thread.sleep(202);
}
catch (InterruptedException i2) {
i2.printStackTrace();
}
}
}
// creation of ThreadState class
// to implement Runnable interface
public class ThreadState implements Runnable {
public static Thread t1;
public static ThreadState o1;
public static void main(String args[])
{
o1 = new ThreadState();
t1 = new Thread(o1);
System.out.println("post-spanning, state of t1 is"
+ " " + t1.getState());
// lets invoke start() method on t1
t1.start();
// Now,Thread t1 is moved to runnable state
System.out.println(
"post invoking of start() method, state of t1 is"
+ " " + t1.getState());
}
public void run()
{
GFG g1 = new GFG();
Thread t2 = new Thread(g1);
// Thread is created and its in new state.
t2.start();
// Now t2 is moved to runnable state
System.out.println(
"state of t2 Thread, post-calling of start() method is"
+ " " + t2.getState());
// create a try-catch block to set t1 in waiting
// state
try {
Thread.sleep(202);
}
catch (InterruptedException i2) {
i2.printStackTrace();
}
System.out.println(
"State of Thread t2 after invoking to method sleep() is"
+ " " + t2.getState());
try {
t2.join();
System.out.println(
"State of Thread t2 after join() is"
+ " " + t2.getState());
}
catch (InterruptedException i3) {
i3.printStackTrace();
}
System.out.println(
"state of Thread t1 after completing the execution is"
+ " " + t1.getState());
}
}
Output:
post-spanning, state of t1 is NEW
post invoking of start() method, state of t1 is RUNNABLE
state of t2 Thread, post-calling of start() method is RUNNABLE
The state for t1 after it invoked join method() on Thread t2 TIMED_WAITING
State of Thread t2 after invoking to method sleep() is TIMED_WAITING
State of Thread t2 after join() is TERMINATED
state of Thread t1 after completing the execution is RUNNABLE
Vậy là chúng ta đã cùng nhau tìm hiểu Thread là gì cũng như cách tạo Thread trong Java. Hi vọng rằng những thông tin được chia sẻ trong bài viết sẽ giúp bạn nắm vững kiến thức về Thread.
Cảm ơn bạn đã đọc bài viết, nếu bạn đang quan tâm đến học lập trình thì hãy tham khảo ngay các khóa học lập trình dưới đây tại ICANTECH nhé
Nguồn ảnh: ICANTECH.