Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sử dụng ArrayBlockingQueue trong Android

Giới thiệu về ArrayBlockingQueue

ArrayBlockingQueue là implementation của BlockingQueue interface, được hỗ trợ bởi mảng cố định (fixed-size array). Đặc điểm chính:

  • Bounded: Dung lượng cố định, chỉ định khi tạo
  • FIFO: First-In-First-Out
  • Thread-safe: Sử dụng ReentrantLock + Condition
  • Blocking: put() chờ khi đầy, take() chờ khi rỗng
  • Fairness: Tùy chọn chính sách công bằng (fair policy) cho luồng chờ
Phù hợp cho pattern Producer-Consumer.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project, điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:id="@+id/actionEvent"
        android:textSize="40sp"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />

</LinearLayout>

Bước 3: Viết logic cơ bản (src/MainActivity.java)

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.util.concurrent.ArrayBlockingQueue;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView actionEvent = findViewById(R.id.actionEvent);

        // Tạo queue dung lượng 50
        ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<>(50);

        // Thêm phần tử (add/offer)
        arrayBlockingQueue.add("sai");
        arrayBlockingQueue.add("ram");
        arrayBlockingQueue.add("krishna");
        arrayBlockingQueue.add("prasad");

        actionEvent.setText("Queue: " + arrayBlockingQueue.toString());
    }
}

Chạy ứng dụng

Kết nối thiết bị và chạy ứng dụng.

Cách sử dụng ArrayBlockingQueue trong Android

Các phương thức quan trọng:
NhómPhương thứcHành vi khi đầy/rỗng
Thêmadd(e)Ném IllegalStateException nếu đầy
offer(e)Trả về false nếu đầy
put(e)Block cho đến khi có chỗ
Lấy/Xóaremove() / poll()poll trả về null, remove ném exception nếu rỗng
take()Block cho đến khi có phần tử
peek()Xem head, không xóa, trả về null nếu rỗng
Kiểm trasize(), isEmpty(), remainingCapacity(), contains(o)
Ví dụ Producer-Consumer đơn giản:
// Producer thread
new Thread(() -> {
    try {
        for (int i = 0; i < 10; i++) {
            queue.put("Item " + i); // Block nếu đầy
            Thread.sleep(100);
        }
    } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
}).start();

// Consumer thread
new Thread(() -> {
    try {
        while (true) {
            String item = queue.take(); // Block nếu rỗng
            process(item);
        }
    } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
}).start();