Cổng Khoa học Máy tính dành cho những người yêu thích máy tính. Nó bao gồm các bài báo về khoa học máy tính và lập trình được viết tốt, tư duy tốt và được giải thích tốt, các câu đố và thực hành / lập trình cạnh tranh / các câu hỏi phỏng vấn công ty.

Bạn đang xem : tìm hiểu luồng trong java

Thông thường, chúng ta có thể định nghĩa luồng là một quy trình con có trọng lượng nhẹ với đơn vị quy trình nhỏ nhất và cũng có các đường dẫn thực thi riêng biệt . Các luồng này sử dụng bộ nhớ dùng chung nhưng chúng hoạt động độc lập do đó nếu có một ngoại lệ trong các luồng sẽ không ảnh hưởng đến hoạt động của các luồng khác mặc dù chúng chia sẻ cùng một bộ nhớ.

Luồng trong môi trường bộ nhớ dùng chung trong hệ điều hành

Như chúng tôi có thể quan sát trong sơ đồ trên, một luồng chạy bên trong tiến trình và sẽ có sự chuyển đổi dựa trên ngữ cảnh giữa các luồng. Có thể có nhiều tiến trình đang chạy trong OS và mỗi tiến trình lại có thể có nhiều luồng chạy đồng thời. Khái niệm Đa luồng được áp dụng phổ biến trong trò chơi, hoạt hình… vv.

Khái niệm Đa nhiệm

Để giúp người dùng Hệ điều hành cung cấp cho người dùng đặc quyền đa nhiệm, nơi người dùng có thể thực hiện đồng thời nhiều thao tác trên máy. Đa nhiệm này có thể được bật theo hai cách:

  1. Đa nhiệm dựa trên quy trình
  2. < strong> Đa nhiệm dựa trên chuỗi

1. Đa nhiệm dựa trên quy trình (Multiprocessing)

Trong loại Đa nhiệm này, các quy trình có dung lượng nặng và mỗi quy trình được phân bổ bởi một vùng bộ nhớ riêng biệt. Và vì quy trình này nặng nên chi phí giao tiếp giữa các quy trình cao và mất nhiều thời gian để chuyển đổi giữa các quy trình vì nó liên quan đến các hành động như tải, lưu trong sổ đăng ký, cập nhật bản đồ, danh sách, v.v.

2. Đa nhiệm dựa trên luồng

Như chúng ta đã thảo luận ở trên, Luồng được cung cấp với tính chất nhẹ và chia sẻ cùng một không gian địa chỉ và chi phí giao tiếp giữa các luồng cũng thấp.

Tại sao Threads được sử dụng?

Giờ đây, chúng ta có thể hiểu lý do tại sao các luồng đang được sử dụng vì chúng có ưu điểm là nhẹ và có thể cung cấp giao tiếp giữa nhiều luồng với Chi phí thấp, góp phần tạo ra đa tác vụ hiệu quả trong bộ nhớ dùng chung Môi trường.

Vòng đời của luồng

Có các trạng thái khác nhau Luồng chuyển vào trong suốt thời gian tồn tại của nó, hãy cho chúng tôi biết về những trạng thái đó trong những dòng sau: trong thời gian tồn tại của nó , một chuỗi trải qua các trạng thái sau, cụ thể là:

  1. Trạng thái mới
  2. Trạng thái hoạt động
  3. Trạng thái chờ / bị chặn
  4. Đã hẹn giờ Trạng thái chờ đợi
  5. Trạng thái đã kết thúc

Vòng đời của chuỗi

Chúng tôi có thể thấy hoạt động của các trạng thái khác nhau trong một Chuỗi trong Sơ đồ trên, hãy cho chúng tôi biết chi tiết từng trạng thái:

< mạnh> 1. Trạng thái mới

Theo mặc định, một Luồng sẽ là một trạng thái mới, ở trạng thái này, mã chưa được chạy và quá trình thực thi chưa được bắt đầu.

2. Trạng thái Hoạt động

Một Luồng là trạng thái mới theo mặc định được chuyển sang trạng thái Hoạt động khi nó gọi phương thức start (), trạng thái Hoạt động của nó chứa hai trạng thái con cụ thể là:

  • Trạng thái có thể chạy: Trong Trạng thái này, Luồng sẵn sàng chạy tại bất kỳ thời điểm nào và nhiệm vụ của Bộ lập lịch luồng là cung cấp thời gian luồng cho các luồng được bảo toàn trạng thái có thể chạy. Một chương trình đã chia sẻ Đa luồng chia sẻ các phần của khoảng thời gian được chia sẻ giữa các luồng, do đó, các luồng này chạy trong một khoảng thời gian ngắn và đợi ở trạng thái có thể chạy để nhận phần lịch của chúng trong một khoảng thời gian.
  • Trạng thái đang chạy: Khi luồng nhận CPU được cấp phát bởi Bộ lập lịch luồng, nó sẽ chuyển từ trạng thái “Chạy được” sang trạng thái “Đang chạy”. và sau khi kết thúc phiên phần thời gian nhất định của nó, nó lại chuyển trở lại trạng thái “Có thể chạy được” và đợi phần thời gian tiếp theo của nó.
Xem Thêm  SQL JOIN dành cho người mới bắt đầu - làm thế nào để thực hiện một tham gia trong sql

3. Trạng thái chờ / bị chặn

Nếu một Luồng không hoạt động nhưng trong thời gian tạm thời, thì nó đang ở trạng thái chờ hoặc bị chặn, ví dụ: nếu có hai luồng, T1 và T2 trong đó T1 cần giao tiếp với máy ảnh và luồng khác T2 đã sử dụng một máy ảnh để quét sau đó T1 đợi cho đến khi Luồng T2 hoàn thành công việc của nó, ở trạng thái này T1 được đỗ để chờ trạng thái và trong một tình huống khác, người dùng gọi hai Luồng T2 và T3 với cùng một chức năng và cả hai đều có cùng một thời gian nhất định. bởi Thread Scheduler thì cả Thread T1, T2 đều ở trạng thái bị chặn. Khi có nhiều luồng đỗ ở trạng thái Bị chặn / Đang chờ Bộ lập lịch biểu luồng sẽ xóa Hàng đợi bằng cách từ chối các Chủ đề không mong muốn và phân bổ CPU trên cơ sở ưu tiên.

4. Trạng thái chờ theo thời gian

Đôi khi thời gian chờ luồng lâu hơn gây ra hiện tượng chết đói, nếu chúng ta lấy ví dụ như có hai luồng T1, T2 đang chờ CPU và T1 đang trải qua hoạt động Mã hóa quan trọng và nếu nó không thoát khỏi CPU cho đến khi hoạt động của nó được thực thi thì T2 sẽ tiếp xúc với thời gian chờ lâu hơn với độ chắc chắn không xác định, Để tránh tình trạng chết đói này, chúng tôi đã định thời gian Chờ trạng thái để tránh loại kịch bản đó như trong Thời gian chờ đợi, mỗi luồng có một khoảng thời gian mà phương thức sleep () được gọi và sau khi hết thời gian, Luồng bắt đầu thực thi tác vụ của nó.

5. Trạng thái đã kết thúc

Một chuỗi sẽ ở Trạng thái kết thúc, do các lý do sau:

  • Một chuỗi đạt được kết thúc khi nó hoàn thành nhiệm vụ bình thường.
  • Đôi khi Chủ đề có thể bị kết thúc do các sự kiện bất thường như lỗi phân đoạn, ngoại lệ… v.v.. và kiểu chấm dứt như vậy có thể được gọi là Chấm dứt bất thường.
  • Một chuỗi bị chấm dứt có nghĩa là nó đã chết và không còn tồn tại nữa.

Chuỗi chính là gì?

Như chúng ta đã quen thuộc, chúng ta tạo Phương thức Chính trong mỗi và mọi Chương trình Java, hoạt động như một điểm nhập để mã được JVM thực thi, Tương tự như vậy trong Khái niệm Đa luồng này, Mỗi Chương trình có một Chủ đề chính được cung cấp theo mặc định bởi JVM, do đó, bất cứ khi nào một chương trình được tạo trong java, JVM sẽ cung cấp Luồng chính cho việc thực thi của nó.

Làm thế nào để tạo chuỗi bằng ngôn ngữ lập trình Java?

Chúng ta có thể tạo Luồng trong java bằng hai cách, đó là:

  1. Bằng cách mở rộng Lớp luồng
  2. Bằng cách triển khai giao diện Runnable < / li>

1. Bằng cách mở rộng lớp luồng

Chúng ta có thể chạy Luồng trong Java bằng cách sử dụng Lớp luồng, lớp này cung cấp các hàm tạo và phương thức để tạo và thực hiện các hoạt động trên một luồng, mở rộng lớp luồng có thể triển khai Giao diện có thể chạy được . Chúng tôi sử dụng các hàm tạo sau để tạo Luồng:

  • Luồng
  • Luồng (Runnable r)
  • Luồng (Tên chuỗi)
  • < li> Luồng (Tên chuỗi, Runnable r)

Mã mẫu để tạo Luồng bằng cách Mở rộng Lớp Luồng:

Java


nhập java.io. *;

nhập java.util. *;

public class < / code> GFG mở rộng Chủ đề {

public void run ()

{

< code class = "trơn"> System.out.println ( "Luồng bắt đầu chạy ..." );

}

public static void main (String [] args)

{

GFG g1 = mới GFG ();

g1.start ();

}

}

 
 

Đầu ra

 Luồng bắt đầu chạy ... 

Mã mẫu để tạo Chuỗi bằng cách sử dụng Giao diện Runnable:

Java

nhập java.io. *;

nhập java.util. *; < / code>

public class GFG triển khai Runnable { < / p>

public void run ()

{

System.out.println (

"Luồng đang chạy thành công" );

}

public static void main (String [] args)

{

GFG g1 = new GFG ();

Chủ đề t1

= new Thread (g1);

t1.start ();

}

}

 
 

Đầu ra

 Luồng đang chạy thành công 

Mã mẫu để tạo Luồng trong Java sử dụng Luồng (tên chuỗi):

Java

import java.io. *;

import java.util. *;

< p class = "line number4 index3 alt1"> public class GFG {

public static void main (String args [])

{

Thread t = new Thread (< / code> "Xin chào các Geeks!" );

t.start ();

String s = t.getName ();

System.out.println (s);

}

}

 
 

Đầu ra

 Xin chào các Geeks! 

Mã Java mẫu tạo Đối tượng Chủ đề bằng cách sử dụng Chủ đề (Runnable r, Tên chuỗi):

Java

nhập java.io. *;

< code class = "keyword"> nhập java.util. *;

< p class = "line number4 index3 alt1"> public class GFG < code class = "keyword"> triển khai Runnable {

public void run ()

{

System.out.println (

"Luồng được tạo và chạy thành công ..." );

}

public static void main (String [] args)

{

Runnable r1 = new GFG ();

Thread t1 = new Thread (r1, " My Thread " ); < / code>

t1.start ();

String str = t1.getName ();

System.out.println (str);

}

}

< p class = "code-editor-container">

 
 

Đầu ra

 Chuỗi của tôi
Luồng được tạo và chạy thành công ... 

Chương trình Java để khám phá các trạng thái luồng khác nhau:

< p> Hãy để chúng tôi xem hoạt động của các trạng thái luồng bằng cách triển khai chúng trên Luồng t1 và t2.

Java

nhập java.io. *;

nhập java.util. *;

class GFG thực hiện Runnable {

< / code> public void run ()

{

thử {

Thread.sleep ( 102 );

}

catch (InterruptException i1 ) {

i1.printStackTrace ();

}

System.out.println (

"Trạng thái cho t1 sau khi nó gọi phương thức tham gia () trên luồng t2"

+ "" + ThreadState.t1.getState ());

< code class = "undefined space">

thử < / code> {

Thread.sleep ( 202 );

}

catch (InterruptException i2) {

i2.printStackTrace ();

}

< p class = "line number28 index27 alt1">

public class ThreadState triển khai Runnable {

public static Chủ đề t1;

public static ThreadState o1;

public static void main (Chuỗi args [])

{

o1 = new ThreadState ();

t1 = mới Chủ đề (o1);

System.out.println ( "post-spanning, trạng thái của t1 là"

+ " " + t1.getState ());

t1.start ();

System.out.println (

" đăng gọi phương thức start (), trạng thái của t1 là "

+ " " + t1.getState ());

}

public void run ()

{

GFG g1 = new < mã class = "trơn"> GFG ();

Chủ đề t2 = mới < / p>

t2.start ();

< p class = "line number53 index52 alt2">

System.out.println (

"trạng thái của luồng t2, sau khi gọi phương thức start () là"

< / code> + "" + t2.getState ());

thử < code class = "trơn"> {

Chủ đề. sleep ( 202 );

}

catch (InterruptException i2) {

i2.printStackTrace ();

}

System.out.println (

"Trạng thái của Luồng t2 sau khi gọi đến phương thức sleep () là"

+ "" + t2.getState ()); < / p>

thử {< / code>

t2.join (); < / p>

}

catch (InterruptException i3) {

i3.printStackTrace ();

}

System.out.println (

" trạng thái của Thread t2 sau khi hoàn thành thực thi là "

+ " " + t1.getState ());

}

}

 
 

< strong> Đầu ra

 sau kéo dài, trạng thái của t1 là MỚI
đăng gọi phương thức start (), trạng thái của t1 là RUNNABLE
trạng thái của luồng t2, sau khi gọi phương thức start () là RUNNABLE
Trạng thái cho t1 sau khi nó gọi phương thức nối () trên luồng t2 TIMED_WAITING
Trạng thái của Luồng t2 sau khi gọi đến phương thức sleep () là TIMED_WAITING
trạng thái của Luồng t2 sau khi hoàn tất quá trình thực thi là RUNNABLE 

My Personal Notes


Xem thêm những thông tin liên quan đến chủ đề học chủ đề trong java

Java 16. Lớp Math và các hàm toán học trong Java | Phần 1 - Lập Trình Java Cơ Bản

alt

  • Tác giả: TITV
  • Ngày đăng: 2021-05-03
  • Đánh giá: 4 ⭐ ( 9971 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: ★ Khóa học miễn phí LậpTrìnhJava: https://bit.ly/2XSfJsO ★ LậpTrìnhC: https://bit.ly/3k7sA2B ★ Ủng hộ phát triển kênh: Momo,ZaloPay,ViettelPay: 0374568701 / STK: 109005606811 Vietinbank – CTK: Le Nhat Tung. ★ Link tải code: https://bit.ly/3AwCNeX
    ★ Khóa học Lập trình Java: bao gồm tất cả nội dung kiến thức về các công cụ lập trình IDE, Java Core, Các thuật toán, Lập trình hướng đối tượng Java, Cấu trúc dữ liệu Java, Xử lý tập tin trong Java, Lập trình giao diện AWT và Swing, Lập trình mạng Java, Sử dụng Java để tương tác với cơ sở dữ liệu, Lập trình xây dựng ứng dụng website trên nền tảng Java web, JSP và Servlet.
    Khóa học này cung cấp phần lớn kiến thức và kỹ năng về ngôn ngữ lập trình java và là bước đệm cho các lập trình viên muốn tìm hiểu tiếp ngôn ngữ lập trình Android.
    Khóa học này phù hợp cho các bạn mới bắt đầu học Lập trình Java, hoặc các bạn muốn ôn tập lại kiến thức một cách hệ thống và mạch lạc để chuẩn bị đi làm.
    ★ Bạn cũng có thể tìm thấy các khóa học về ngôn ngữ khác tại đây: https://www.youtube.com/c/TITVvn
    ★ Cácn bạn vui lòng đăng ký kênh (Subscribe) và chia sẻ video (Share) đến các bạn cùng lớp nhé.
    ★ Diễn đàn hỏi đáp: https://www.facebook.com/groups/titv.vn
    ★ Facebook: https://www.facebook.com/tung.lenhat
    ★ Website: http://titv.vn, http://titv.edu.vn
    =================================
    ✩ Hộp thư đóng góp ý kiến hoặc ý tưởng: lenhattung@gmail.com
    =================================
    © Bản quyền thuộc về TITV ☞ Vui lòng không đăng tải lại Video từ kênh này
    © Copyright by TITV Channel ☞ Do not Re-up

11 Cách học lập trình Java chỉ trong vài tuần

  • Tác giả: final-blade.com
  • Đánh giá: 3 ⭐ ( 4236 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Tổng hợp các chủ đề từ cơ bản đến nâng cao

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 3763 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài viết này mình xin được tổng hợp một số chủ đề từ cơ bản đến nâng cao khi lập trình web với Java.

    1. Spring Core (MVC or Boot)
    2. Spring Data
    3. Spring Security

    1. Dependency Injection & Auto-configuration ✔️...

Lập trình Java trong 4 tuần

  • Tác giả: gitiho.com
  • Đánh giá: 3 ⭐ ( 5000 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Java là một ngôn ngữ lập trình phổ biến. Điều này được chứng minh thực tế trong suốt 20 năm qua. Ngày nay cơ hội việc làm cho các lập trình viên Java luôn không ngừng rộng mở, tạo cơ hội cực kì lớn cho những ai đã và đang đi theo con đường lập trình. ...

Interface trong Java

  • Tác giả: hocjava.com
  • Đánh giá: 3 ⭐ ( 5829 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Một Interface trong Java là một bản thiết kế của một lớp. Nó chỉ có các phương thức trừu tượng. Interface là một kỹ thuật để thu được tính...

Học Lập Trình Online Miễn Phí

  • Tác giả: vncoder.vn
  • Đánh giá: 3 ⭐ ( 3866 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Java là gì?

    Java là ngôn ngữ lập trình bậc cao, được phát triển bởi Sun Microsystems, do James Gosling khởi xướng và phát hành vào năm 1995 như là một thành phần cốt lõi của nền tảng Java của Sun Microsystems (Java 1.0 [J2SE]). Java chạy trên rất nhiều nền tảng khác nhau, như Windows, Mac và các phiên bản kh...

[Java Cơ Bản] Các chủ đề trong môn Java Cơ Bản

  • Tác giả: www.dotplays.com
  • Đánh giá: 5 ⭐ ( 6575 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hi các em, trong bài viết này, thầy giới thiệu tới các em các chủ đề cần thiết phải học

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php