TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA VÀ DEMO MINH HỌA

25 1.2K 3
TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA VÀ DEMO MINH HỌA

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC LỜI MỞ ĐẦU 2 PHẦN A: ĐA LUỒNG TRONG JAVA 2 I. Luồng trong Java là gì ? 2 II. Cách tạo và quản lý luồng trong Java 2 1. Tạo luồng bằng cách kế thừa từ lớp Thread 2 2. Tạo luồng bằng cách thực hiện từ Interface Runnable 2 III. Một số thông tin liên quan đến luồng 2 1. ThreadID 2 2. ThreadName 2 3. Độ ưu tiên của luồng (Priority) 2 4. Độ lớn ngăn xếp của luồng (StackSize) 2 IV. Các trạng thái luồng 2 V. Các trạng thái luồng do java định nghĩa 2 VI. Một số phương thức thông dụng 2 VII. Nhóm luồng 2 VIII. Đồng bộ hóa 2 PHẦN B: DEMO 2 I. Mô tả chương trình 2 II. Cấu trúc chương trình chương trình 2 KẾT LUẬN 2 TÀI LIỆU THAM KHẢO 2   LỜI MỞ ĐẦU Ngày nay, dưới sự phát triển nhanh chóng của khoa học kỹ thuật, một kỷ nguyên mới được mở ra, kỷ nguyên của công nghệ thông tin. Nhu cầu của loài người ngày càng lớn, đặc biệt là các ngành khoa học kỹ thuật khác đều cần tới sự hỗ trợ của công nghệ thông tin, mặc dù công nghệ phần cứng phát triển rất nhanh, CPU với tốc độ xử lý ngày càng được nâng cao, nhưng lại nảy sinh nhiều bài toán trong thực tế đòi hỏi thời gian thực hiện phải nhanh hơn nữa. Vấn đề xử lý song song đang ngày càng được nghiên cứu nhiều để giải quyết một số bài toán mà thực tế đang đặt ra, những vấn đề cần phải có kết quả trong một khoảng thời gian nhất định. Vì vậy, việc nghiên cứu các giải thuật cho xử lý song song đang là một yêu cầu và thách thức đối với các nhà lập trình phần mềm. Cùng với nhu cầu thiết yếu như vậy, vào năm 1991 Sun Microsystems đã cho ra đời ngôn ngữ lập trình Java. Ngôn ngữ lập trình Java hỗ trợ cho việc xử lý song song với cơ chế đa luồng. Thông qua bài tập lớn môn “Nguyên lý Hệ điều hành” nhóm chúng em xin trình bày một cách khái quát và cơ bản nhất về vấn đề “Phân luồng (Thread) trong Java”.   PHẦN A: ĐA LUỒNG TRONG JAVA I. Luồng trong Java là gì? Luồng là đơn vị nhỏ nhất trong java có thể thực hiện được 1 công việc riêng biệt. Các luồng được quản lý bởi máy ảo java. Một ứng dụng java ngoài luồng chính có thể có các luồng khác thực thi đồng thời. Đa luồng giúp cho các tác vụ được xử lý độc lập giúp công việc được hoàn thành nhanh chóng. Trình duyệt web hay các chương trình chơi nhạc là 1 ví dụ điển hình về đa luồng. Khi duyệt 1 trang web, có rất nhiều hình ảnh, CSS, javascript... được tải đồng thời bởi các luồng khác nhau. Khi play nhạc, chúng ta vẫn có thể tương tác được với nút điều khiển như: Play, Pause, Next, Back ... vì luồng phát nhạc là luồng riêng biệt với luồng tiếp nhận tương tác của người dùng. Ưu điểm của đa luồng: Multithreading có chi phí thấp hơn Multiprocessing (về không gian, thời gian). Trong multiprocessing các tiến trình chạy trên các địa chỉ riêng biệt. Các luồng trong multithreading có thể chia sẻ cùng không gian bộ nhớ. Các tiến trình trong multiprocessing gọi nhau phải chịu chi phí lớn hơn các luồng trong multithreading. Multithreading cho phép chúng ta thiết kế chương trình hiệu quả hơn mà sử dụng ít tài nguyên CPU. Multithreading còn cho phép chúng ta điều khiển cho các luồng sleep một thời gian trong khi các luồng khác vẫn hoạt động mà không làm cho hệ thống bị pause. II. Cách tạo và quản lý luồng trong Java Trong java ta có thể tạo ra 1 luồng dễ dàng bằng cách tạo 1 đối tượng của lớp được thừa kế từ lớp Thread (java.lang.Thread) hoặc implements từ giao diện Runnable. Khi nào implements từ interface Runnable? Khi bạn muốn kế thừa từ 1 lớp khác ngoài lớp Thread, nếu bạn kế thừa nữa từ lớp Thread thì sẽ không được vì java không hỗ trợ đa thừa kế do đó ta phải implements từ interface Runnable. Trong trường hợp còn lại ta có thể kế thừa từ lớp Thread. 1. Tạo luồng bằng cách kế thừa từ lớp Thread Để tạo luồng bằng cách tạo lớp kế thừa từ lớp Thread, ta phải làm các công việc sau: Khai báo 1 lớp mới kế thừa từ lớp Thread. Override lại phương thức run ở lớp này, những gì trong phương thức run sẽ được thực thi khi luồng bắt đầu chạy. Sau khi luồng chạy xong tất cả các câu lệnh trong phương thức run thì luồng cũng tự hủy. Tạo 1 thể hiện (hay 1 đối tượng) của lớp ta vừa khai báo. Sau đó gọi phương thức start() của đối tượng này để bắt đầu thực thi luồng. Tuy ta khai báo những công việc cần làm của luồng trong phương thức run() nhưng khi thực thi luồng ta phải gọi phương thức start(). Vì đây là phương thức đặc biệt mà java xây dựng sẵn trong lớp Thread, phương thức này sẽ cấp phát tài nguyên cho luồng mới rồi chạy phương thức run() ở luồng này. Vì vậy, nếu ta gọi phương thức run() mà không gọi start() thì cũng như ta gọi 1 phương thức của 1 đối tượng bình thường và phương thức vẫn chạy trên luồng mà gọi phương thức chứ không chạy ở luồng mới tạo ra nên vẫn chỉ có 1 luồng chính làm việc chứ ứng dụng vẫn không phải là đa luồng. Ví dụ: Khai báo lớp mới ThreadX kế thừa từ lớp Thread và override phương thức run() : public class ThreadX extends Thread{ private String prefix=; public ThreadX(String p) { prefix=p;

HỌC VIỆN KỸ THUẬT MẬT MÃ Khoa Công Nghệ Thông Tin - - BÁO CÁO BÀI TẬP LỚN ĐỀ TÀI: TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA VÀ DEMO MINH HỌA Giáo viên hướng dẫn : Lê Đức Thuận Sinh viên thực : Hà Nội, 09/2014 Hà Nội, 09/2014 MỤC LỤC LỜI MỞ ĐẦU PHẦN A: ĐA LUỒNG TRONG JAVA I Luồng Java ? II Cách tạo quản lý luồng Java Tạo luồng cách kế thừa từ lớp Thread 2 Tạo luồng cách thực từ Interface Runnable III Một số thông tin liên quan đến luồng ThreadID 2 ThreadName Độ ưu tiên luồng (Priority) Độ lớn ngăn xếp luồng (StackSize) IV Các trạng thái luồng .2 V Các trạng thái luồng java định nghĩa VI Một số phương thức thông dụng VII Nhóm luồng VIII Đồng hóa .2 PHẦN B: DEMO I Mơ tả chương trình II Cấu trúc chương trình chương trình KẾT LUẬN TÀI LIỆU THAM KHẢO TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA NGUYÊN LÝ HỆ ĐIỀU HÀNH LỜI MỞ ĐẦU Ngày nay, phát triển nhanh chóng khoa học kỹ thuật, kỷ nguyên mở ra, kỷ nguyên công nghệ thơng tin Nhu cầu lồi người ngày lớn, đặc biệt ngành khoa học kỹ thuật khác cần tới hỗ trợ công nghệ thông tin, công nghệ phần cứng phát triển nhanh, CPU với tốc độ xử lý ngày nâng cao, lại nảy sinh nhiều toán thực tế đòi hỏi thời gian thực phải nhanh Vấn đề xử lý song song ngày nghiên cứu nhiều để giải số toán mà thực tế đặt ra, vấn đề cần phải có kết khoảng thời gian định Vì vậy, việc nghiên cứu giải thuật cho xử lý song song yêu cầu thách thức nhà lập trình phần mềm Cùng với nhu cầu thiết yếu vậy, vào năm 1991 Sun Microsystems cho đời ngôn ngữ lập trình Java Ngơn ngữ lập trình Java hỗ trợ cho việc xử lý song song với chế đa luồng Thông qua tập lớn môn “Nguyên lý Hệ điều hành” nhóm chúng em xin trình bày cách khái quát vấn đề “Phân luồng (Thread) Java” NGUYÊN LÝ HỆ ĐIỀU HÀNH TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA PHẦN A: ĐA LUỒNG TRONG JAVA I Luồng Java gì? Luồng đơn vị nhỏ java thực công việc riêng biệt Các luồng quản lý máy ảo java Một ứng dụng java ngồi luồng có luồng khác thực thi đồng thời Đa luồng giúp cho tác vụ xử lý độc lập giúp công việc hồn thành nhanh chóng Trình duyệt web hay chương trình chơi nhạc ví dụ điển hình đa luồng - Khi duyệt trang web, có nhiều hình ảnh, CSS, javascript tải đồng thời luồng khác - Khi play nhạc, tương tác với nút điều khiển như: Play, Pause, Next, Back luồng phát nhạc luồng riêng biệt với luồng tiếp nhận tương tác người dùng Ưu điểm đa luồng: - Multithreading có chi phí thấp Multiprocessing (về khơng gian, thời gian) Trong multiprocessing tiến trình chạy địa riêng biệt Các luồng multithreading chia sẻ không gian nhớ - Các tiến trình multiprocessing gọi phải chịu chi phí lớn luồng multithreading - Multithreading cho phép thiết kế chương trình hiệu mà sử dụng tài ngun CPU - Multithreading cịn cho phép điều khiển cho luồng sleep thời gian luồng khác hoạt động mà không làm cho hệ thống bị pause NGUYÊN LÝ HỆ ĐIỀU HÀNH TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA II Cách tạo quản lý luồng Java Trong java ta tạo luồng dễ dàng cách tạo đối tượng lớp thừa kế từ lớp Thread (java.lang.Thread) implements từ giao diện Runnable Khi implements từ interface Runnable? - Khi bạn muốn kế thừa từ lớp khác lớp Thread, bạn kế thừa từ lớp Thread khơng java khơng hỗ trợ đa thừa kế ta phải implements từ interface Runnable - Trong trường hợp cịn lại ta kế thừa từ lớp Thread Tạo luồng cách kế thừa từ lớp Thread Để tạo luồng cách tạo lớp kế thừa từ lớp Thread, ta phải làm công việc sau: - Khai báo lớp kế thừa từ lớp Thread - Override lại phương thức run lớp này, phương thức run thực thi luồng bắt đầu chạy Sau luồng chạy xong tất câu lệnh phương thức run luồng tự hủy - Tạo thể (hay đối tượng) lớp ta vừa khai báo - Sau gọi phương thức start() đối tượng để bắt đầu thực thi luồng Tuy ta khai báo công việc cần làm luồng phương thức run() thực thi luồng ta phải gọi phương thức start() Vì phương thức đặc biệt mà java xây dựng sẵn lớp Thread, phương thức cấp phát tài nguyên cho luồng chạy phương thức run() luồng Vì vậy, ta gọi phương thức run() mà không gọi start() ta gọi phương thức đối tượng bình thường phương thức chạy luồng mà gọi phương thức không chạy luồng tạo nên có luồng làm việc ứng dụng khơng phải đa luồng NGUYÊN LÝ HỆ ĐIỀU HÀNH TÌM HIỂU CƠ CHẾ PHÂN LUỒNG TRONG JAVA Ví dụ: - Khai báo lớp ThreadX kế thừa từ lớp Thread override phương thức run() : public class ThreadX extends Thread{ private String prefix=""; public ThreadX(String p) { prefix=p; } public void run() { for(int i=0;i

Ngày đăng: 27/03/2015, 17:53

Từ khóa liên quan

Mục lục

  • BÁO CÁO BÀI TẬP LỚN

  • LỜI MỞ ĐẦU

  • PHẦN A: ĐA LUỒNG TRONG JAVA

    • I. Luồng trong Java là gì?

    • II. Cách tạo và quản lý luồng trong Java

      • 1. Tạo luồng bằng cách kế thừa từ lớp Thread

      • 2. Tạo luồng bằng cách thực hiện từ Interface Runnable

      • III. Một số thông tin liên quan đến luồng

        • 1. ThreadID

        • 2. ThreadName

        • 3. Độ ưu tiên của luồng (Priority)

        • 4. Độ lớn ngăn xếp của luồng (StackSize)

        • IV. Các trạng thái luồng

        • V. Các trạng thái luồng do java định nghĩa

        • VI. Một số phương thức thông dụng

        • VII. Nhóm luồng

        • VIII. Đồng bộ hóa

        • PHẦN B: DEMO

        • I. Mô tả chương trình

        • II. Cấu trúc chương trình chương trình

        • KẾT LUẬN

        • TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

Tài liệu liên quan