Giới thiệu về LinkedBlockingDeque
LinkedBlockingDeque triển khai Collection và AbstractQueue, cung cấp giới hạn tùy chọn (optional bounded) dựa trên nút liên kết. Có thể truyền dung lượng tối đa vào constructor để kiểm soát bộ nhớ.
Phương thức remainingCapacity() trả về số phần tử có thể thêm vào nữa trước khi đạt giới hạn. Nếu không chỉ định dung lượng khi tạo, mặc định là Integer.MAX_VALUE.
Ví dụ minh họa
Bước 1: Tạo project
Android Studio → File → New Project.
Bước 2: Layout
<?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: Code (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);
// Tạo deque KHÔNG giới hạn (mặc định)
linkedBlockingDeque = new LinkedBlockingDeque<>();
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);
actionEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
actionEvent.setText("" + linkedBlockingDeque.remainingCapacity());
}
});
}
}
Kết quả
Vì tạo bằng constructor mặc định (unbounded), click TextView hiển thị: 2147483647
Tạo LinkedBlockingDeque CÓ giới hạn
// Giới hạn 10 phần tử
LinkedBlockingDeque<String> boundedDeque = new LinkedBlockingDeque<>(10);
boundedDeque.add("a"); // size=1
boundedDeque.remainingCapacity(); // trả về 9
Bảng hành vi remainingCapacity()
| Constructor | remainingCapacity() ban đầu | Sau khi add 5 phần tử |
|---|---|---|
new LinkedBlockingDeque<>() |
Integer.MAX_VALUE | Integer.MAX_VALUE |
new LinkedBlockingDeque<>(10) |
10 | 5 |
Lưu ý
- Chỉ có ý nghĩa khi deque được tạo với dung lượng cố định
- Với unbounded deque, hãy dùng
size()để theo dõi số lượng phần tử - Phương thức này thread-safe