Giới thiệu về LinkedBlockingDeque
LinkedBlockingDeque là deque có thể bounded/unbounded, linked-nodes, thread-safe, implement BlockingDeque. Phương thức getFirst() lấy phần tử đầu (head) KHÔNG xóa. Ném exception nếu rỗng.
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 (src/MainActivity.java)
package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.concurrent.LinkedBlockingDeque;
public class MainActivity extends AppCompatActivity {
LinkedBlockingDeque<String> linkedBlockingDeque;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Unbounded (không giới hạn)
linkedBlockingDeque = new LinkedBlockingDeque<>();
// Bounded: new LinkedBlockingDeque<>(100);
final TextView actionEvent = findViewById(R.id.actionEvent);
linkedBlockingDeque.add("sai");
linkedBlockingDeque.add("ram");
linkedBlockingDeque.add("krishna");
linkedBlockingDeque.add("prasad");
linkedBlockingDeque.add("ram");
actionEvent.setText(linkedBlockingDeque.toString());
actionEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Lấy phần tử đầu (first/head) - KHÔNG xóa
String first = linkedBlockingDeque.getFirst();
actionEvent.setText("First: " + first);
}
});
}
}
Chạy ứng dụng
Kết nối thiết bị (API 21+) và chạy ứng dụng.

Nhấn vào TextView để lấy phần tử đầu:

So sánh các phương thức lấy đầu LinkedBlockingDeque:Ưu điểm LinkedBlockingDeque vs ConcurrentLinkedDeque: Hỗ trợ blocking operations (put/take), bounded capacity tùy chọn, phù hợp producer-consumer hai đầu.
Phương thức Blocking? Khi rỗng Ghi chú getFirst()Không NoSuchElementException Tương đương element() peekFirst()Không null An toàn hơn takeFirst()Có Chờ Lấy VÀ xóa pollFirst()Không null Lấy VÀ xóa removeFirst()Không NoSuchElementException Lấy VÀ xóa