Trang chủ » Java » Giới thiệu về Threads

Giới thiệu về Threads


Định nghĩa threads

Thread là một đoạn mã nhỏ nhất mà có thể thực thi được, nó thực thi một nhiệm vụ cụ thể nào đó.

Một ứng dụng có thể chia làm nhiều nhiệm vụ, mỗi nhiệm vụ có thể gán cho một thread

Nhiều thread cùng thực hiện đồng thời, gọi là Multithreading.

Các thread có vẻ như thực hiện đồng thời, nhưng thực tế ko phải vậy…

Định nghĩa về multithreading

Multithreading có chi phí thấp hơn multitasking (về không gian, t/g)

Trong multitasking, các tiến trình chạy trên các địa chỉ riêng biệt

Các thread trong multithreading có thể chia sẻ cùng không gian bộ nhớ.

Các tiến trình trong multitasking gọi nhau phải chịu chi phí lơn hơn các thread 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 thread sleep một t/g trong khi các thread khác vẫn hoạt động mà ko làm cho hệ thống bị pause.

Lợi ích của multithreading

Vừa nghe nhạc, vừa xem ảnh đồng thời

Hiển thị cùng lúc nhiều ảnh trên màn hình

Tính toán 2 phép tính đồng thời

Tạo threads

Khi chương trình java thực hiện thì luôn có một thread chạy đó là thread main

Chương trình sẽ bị ngắt quãng khi thread main bị stop.

Main thread có thể được điều khiển thông qua đối tượng thread.

Tham chiếu đến main thread có thể nhận được bằng cách gọi method currentThread() của lớp Thread.

Đối tượng thread có thể được tạo theo 2 cách:

Định nghĩa một lớp là lớp con của lớp Thread được định nghĩa trong gói java.lang

class mythread extends Thread

Định nghĩa một lớp là implements của Runnable interface.

class mythread implements Runnable

Sau khi một thread mới được khởi tạo, chúng ta có thể gọi phương thức start()để start một thread, trái lại nó sẽ là một đối tượng thread rỗng, ko được cấp phát tài nguyên.

Mythread t = new Mythread();t.start();

Khi phương thức start() được gọi, thì tài nguyên hệ thống sẽ được cấp phát cho thread đó và nó sẽ được lập lịch để chạy.

Sau đó phải gọi phương thức run()

Ví dụ

Tạo một thread bằng cách kế thừa lớp Thread.

class MyThread extends Thread{    public static void main(String args[])    {        MyThread Objex = new MyThread();        Objex.create();        System.out.println("This is the main thread");     }

    public void create()     {           Thread Objth = new Thread(this);        Objth.start();   }public void run(){       while(true)      {             try        {                System.out.println("This is the child thread");            Thread.sleep(500);             }             catch(InterruptedException e)        { }    }

 

image

ví dụ 2:

Tạo thread từ việc implement Runnable interface

class MyThread2 implements Runnable{    public static void main(String args[])    {        MyThread2 Objx = new MyThread2();        Objx.create();        System.out.println("This is the main thread");    }

    public void create()     {        Thread Objth = new Thread(this);            Objth.start();      }public void run()  {       while(true)       {        try        {               System.out.println("This is the child thread");               Thread.sleep(500);              }              catch(InterruptedException e)        { }       } }}
image 
Thảo luận về trạng thái của Threads

Running: Thread ở trạng thái running khi phương thực start đã được gọi

Sleeping: thread đang hoạt động cũng có thể bị ngắt quãng bằng cách gọi phương thức sleep(). Thread sẽ chuyển sang trạng thái sleeping một khoảng thời gian.

Waiting: Thread sẽ ở trạng thái này khi phương thức wait() được gọi. Nó được sử dụng khi 2 hay nhiều thread chạy cùng nhau.

Blocked: thread rơi vào trạng thái này khi nó đợi dữ liệu như thao tác input/output.

Dead: thread rơi vào trạng thái này khi phương thức run() kết thúc hoặc phương thức stop() được gọi.

 

image

Một số method của lớp thread

final boolean isAlive(): trả về giá trị true nếu thread còn tồn tại

final String getName(): trả về tên của thread.

void start():

final void join() throws InterruptedException: đợi cho đến khi thread die.

static void yield(): thread hiện tại sẽ tạm ngừng để thread khác chạy.n

final void setName(String name):

final boolean isDaemon(): kiểm tra xem có phải là Daemon thread ko.

static int activeCount(): đếm số thread đang hoạt động

static void sleep():

Quản Lý threads

nThread có thể được xét mức ưu tiên khác nhau (là các hằng của lớp Thread)

NORM_PRIORITY – value is 5

MAX_PRIORITY – value is 10

MIN_PRIORITY – value is 1

Giá trị mặc định là: NORM_PRIORITY

2 phương thức để thiết lập priority:

final void setPriority(int newp): thay đổi mức ưu tiên hiện tại

final int getPriority(): trả về mức ưu tiên.

Tìm hiểu về daemon thread

2 loại thread trong java:

User threads: đc tạo bởi người dùng

Daemon threads: các thread làm việc dưới background và nó cung cấp dịch vụ cho các thread khác.

Ví dụ: – the garbage collector thread

Khi thread của người dùng thoát, JVM sẽ kiểm tra xem còn các thread nào đang chạy ko?

Nếu có thì nó sẽ lập lịch cho các thread đó

Nếu chỉ có Daemon thread hoạt động thì nó sẽ thoát.

Chúng ta cũng có thể thiết lập cho một thread là Daemon thread nếu muốn chương trình chính đợi cho đến khi thread kết thúc.

Thread có 2 phương thức để làm việc với Daemon thread:

public final void setDaemon(boolean value) : Gán một Thread thành Daemon thread

public final boolean isDaemon() : Kiểm tra xem 1 thread có phải là Daemon thread ko?

class TestDaemon implements Runnable{    Thread Objth1,Objth2;      public TestDaemon()      {        Objth1 = new Thread(this);        Objth1.start();Objth2 = new Thread(this);Objth2.setDaemon(true);      }      public void run()      {        System.out.println(Thread.activeCount());        System.out.println(Objth1.isDaemon());System.out.println(Objth2.isDaemon());      }    public static void main(String args[])    {        new TestDaemon();      }}
image
Advertisements

Bình luận

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s