Vector – Lớp Vector trong Java

Lớp Vector xuất hiện từ JDK 1, trước cả khi xuất hiện Collections Framework từ JDK 2. Lớp Vector có tính năng như ArrayList. Khác biệt ở chỗ các phương thức của Vector được đồng bộ hóa, còn ArrayList thì không.

Tiếp tục đọc

#java, #java-collections

ArrayList – Lớp ArrayList trong Java

Lớp ArrayList trong Java được xây dựng dựa trên cấu trúc dữ liệu dạng Array (mảng). Lớp ArrayList được sử dụng rộng rãi vì các chức năng và tính linh hoạt của nó. Hầu hết các lập trình viên chọn ArrayList hơn là chọn Array vì nó là một sự thay thế rất tốt cho các mảng truyền thống trong Java. Lớp ArrayList sử dụng một mảng động, có thể thay đổi kích thước, để lưu trữ các phần tử. Nó là một phần của Java Collections Framework.

Tiếp tục đọc

#array-data-structure, #data-structures, #java, #java-collections

LinkedList – Lớp LinkedList trong Java

Lớp LinkedList trong Java được cài đặt theo dạng Doubly Linked List (Danh sách liên kết đôi). Nó thừa kế lớp AbstractSequentialList và implements hai interfaces ListDeque. Nó là một phần của Java Collections Framework.

Tiếp tục đọc

#data-structures, #java, #java-collections, #linked-list-data-structure

Stack – Lớp Stack trong Java

Collection framework trong Java cung cấp một lớp Stack để mô hình hóa cấu trúc dữ liệu Stack. Lớp này cũng vẫn hoạt động dựa theo cơ chế LIFO (Last In First Out). Tức là, phần tử nào được thêm vào đầu tiên thì sẽ được lấy ra sau cùng.

Tiếp tục đọc

#data-structures, #java, #java-collections, #stack-data-structure

Array – Mảng trong Java

Trong Java, một mảng (array) là một tập hợp các phần tử có cùng kiểu dữ liệu. Nếu kiểu dữ liệu là kiểu nguyên thủy thì các phần tử có địa chỉ liên tiếp nhau trên bộ nhớ (memory). Nếu kiểu dữ liệu là dạng đối tượng của lớp, thì các đối tượng thực tế được lưu trữ trên bộ nhớ heap. Mảng có số phần tử cố định và bạn không thể thay đổi kích thước của nó.

Tiếp tục đọc

#array-data-structure, #data-structures, #java

[Java Concurrency] Giới thiệu Fork/Join Framework và ForkJoinPool trong Java

Fork/Join Framework được thêm vào từ Java 7. Nó cung cấp các công cụ để tăng tốc độ xử lý song song, giúp nâng cao performance cho ứng dụng bằng cách cố gắng tận dụng tất cả các processors có sẵn. Việc này được thực hiện thông qua cách tiếp cận divide and conquer. Trái tim của Fork/Join Framework là class ForkJoinPool, nó là một phần mở rộng của class AbstractExecutorService, nó được cài đặt dựa trên giải thuật work-stealing.

Tiếp tục đọc

#java, #java-concurrency

[Java Concurrency] ExecutorService và ScheduledExecutorService trong Java

Trong các ứng dụng Java, việc tạo và quản lý một số lượng nhỏ các threads (luồng) thì không khó. Nhưng với một ứng dụng lớn, khi mà số lượng các threads phải tạo để chạy các task đồng thời có thể lên tới hàng chục, thậm chí hàng trăm threads thì lại là một vấn đề lớn. Vì vậy, tách biệt việc tạo và quản lý các threads ra khỏi phần còn lại của ứng dụng là việc nên làm. Bên cạnh đó việc tạo một thread sẽ phải trả giá về cả performance và memory. Vì vậy nó là một ý tưởng tốt nếu chúng ta có thể re-use các thread đã tạo.

Tiếp tục đọc

#java, #java-concurrency

[Java Concurrency] Thread Pools

Thread Pools là một giải pháp khi bạn cần giới hạn số lượng threads chạy trong ứng dụng của bạn tại một thời điểm. Nếu chúng ta không có sự giới hạn này, thì mỗi khi có thread mới được tạo và cấp phát bộ nhớ stack cho chúng thì sẽ có vấn đề về performance.

Tiếp tục đọc

#java, #java-concurrency

[Java Concurrency] Blocking Queues

Một blocking queue là một hàng đợi sẽ được khóa lại khi bạn lấy phần tử từ hàng đợi nhưng nó đang bị rỗng (dequeue), hoặc khi bạn đẩy thêm phần tử vào hàng đợi nhưng nó đã bị đầy (enqueue).

Nếu một luồng cố gắng lấy phần tử từ một hàng đợi đang trống rỗng nó sẽ bị blocked lại cho tới khi có một luồng nào đó đẩy thêm phần tử vào hàng đợi. Nếu một luồng cố gắng đẩy phần từ vào một hàng đợi đã đầy nó sẽ bị blocked lại cho tới khi có một luồng nào đó lấy bớt phần tử ra khỏi hàng đợi hoặc xóa hàng đợi.

Tiếp tục đọc

#java, #java-concurrency

[Java Concurrency] Daemon Thread trong Java

Java chia threads làm hai loại: một loại thông thườngDaemon Thread. Chúng chỉ khác nhau ở cách thức ngừng hoạt động. Trong một chương trình các luồng thông thường và luồng Daemon chạy song song với nhau. Khi tất cả các luồng thông thường kết thúc, JVM sẽ tìm tất cả các luồng Daemon đang chạy và ngừng tất cả luồng Daemon lại bất kể nó đang làm việc gì.

Tiếp tục đọc

#java, #java-concurrency