Tải bản đầy đủ (.pdf) (91 trang)

Ứng dụng java trong xây dựng chương trình quản lý thư viện trên mạng internet

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.46 MB, 91 trang )

MỤC LỤC
MỤC LỤC ..........................................................................................................1
CHƯƠNG 1 ........................................................................................................3
GIỚI THIỆU NỘI DUNG ĐỀ TÀI......................................................................3
1.1 Hệ thống quản lý thư viện....................................................................................3
1.1.1 Nhiệm vụ của một hệ thống quản lý thư viện.................................................3
1.1.3 Hướng phát triển của hệ thống thư viện hiện đại............................................5
1.2 Hướng thực thi của đề tài.....................................................................................5

CHƯƠNG 2 ........................................................................................................7
PHÂN TÍCH VÀ LỰA CHỌN MÔ HÌNH SỬ DỤNG........................................7
2.1 Các cấu hình cơ sở dữ liệu Client/Server..............................................................7
2.1.1 Mô hình cơ sở dữ liệu tập trung (Centralized database model).......................7
2.1.2 Mô hình cơ sở dữ liệu theo kiểu file– server (File– server database model) ...8
2.1.3 Mô hình xử lý từng phần cơ sở dữ liệu (Database extract processing model).8
2.1.4 Mô hình cơ sở dữ liệu Client/Server (Client/Server database model) .............9
2.1.5 Mô hình cơ sở dữ liệu phân tán (Distributed database model)......................10
2.2 Mô hình được sử dụng .......................................................................................10
2.2.1 Server .........................................................................................................11
2.2.2 Database .....................................................................................................11

CHƯƠNG 3 ......................................................................................................12
CƠ CHẾ TRUYỀN NHẬN TRONG JAVA ......................................................12
3.1 Các kiến thức cơ bản về Networking..................................................................12
3.2 Networking........................................................................................................16
3.2.1 Giao tiếp giữa phần hiện thực client và Browser ở máy local.......................16
3.2.2 Sockets .......................................................................................................17
3.2.3 Threads, Synchronization và Exceptions .....................................................23

CHƯƠNG 4 ......................................................................................................28
CƠ SỞ DỮ LIỆU .............................................................................................28


4.1 JDBC.................................................................................................................28
4.1.1 JDBC là gì ?................................................................................................28
4.1.2 Cấu trúc JDBC............................................................................................28
4.1.3 ODBC và JDBC..........................................................................................29
4.1.4 Sử dụng JDBC driver ..................................................................................30
4.2 Sử dụng JDBC để truy suất cở sở dữ liệu ...........................................................30
4.3 Kết nối tới cơ sở dữ liệu.....................................................................................31
4.4 Truy Suất Cơ sở dữ liệu .....................................................................................31
4.5 Đối Tượng ResultSet .........................................................................................32
4.6 Đối Tượng ResultSetMetaData ..........................................................................34
4.7 Đối Tượng DatabaseMetaData...........................................................................35
4.8 Lấy Thông Tin Trên Table.................................................................................36

CHƯƠNG 5 ......................................................................................................38
PHÂN TÍCH VÀ THIẾT KẾ.............................................................................38
5.1 Giới thiệu công cụ hỗ trợ thiết kế UML .............................................................38
5.2 Xác định các Use Case.......................................................................................38
5.2.1 Độc giả .......................................................................................................38
5.2.4 Root............................................................................................................52
5.3 Biểu đồ tuần tự “Cho mượn sách”......................................................................53

1


5.4 Biểu đồ tuần tự “Đăng nhập hệ thống”...............................................................53
5.5 Biểu đồ tuần tự “Xét độc giả đăng ký” ..............................................................54
5.6 Biểu đồ tuần tự “Cập nhật sách” ........................................................................54
5.7 Biểu đồ tuần tự “Cập nhật User” .......................................................................55
5.8 Xây dựng biểu đồ lớp ........................................................................................55
5.9 Biểu đồ cài đặt...................................................................................................56

5.9.1 Biểu đồ thành phần “Gói Giao Diện” ..........................................................56
5.9.2 Biểu đồ thành phần “Gói Thực Thể” ...........................................................56
5.10 Biểu đồ triển khai ............................................................................................57
5.11 Biều đồ hoạt động của “Độc giả” .....................................................................57
5.12 Biểu đồ hoạt động của “Thủ thư” .....................................................................58

CHƯƠNG 6 ......................................................................................................59
CHƯƠNG TRÌNH QUẢN LÝ THƯ VIỆN.......................................................59
6.1 Nguyên tắc hoạt động: .......................................................................................59
6.1.1 Các loại User và quyền, cách đăng ký .........................................................59
6.1.2 Cơ chế login................................................................................................60
6.1.3 Cơ chế mượn sách.......................................................................................60
6.1.4 Cơ chế xử lý vi phạm ..................................................................................60
6.2 Mô tả cơ sở dữ liệu ............................................................................................61
6.3 Mô tả chương trình ............................................................................................64
6.3.1 Tổng quan...................................................................................................64
6.3.2 Mô tả chi tiết về cơ chế và quá trình cập nhật dữ liệu ..................................66
6.3.3 Mô tả chi tiết các dữ liệu đặc biệt ................................................................80
6.3.4 Cơ chế timeout............................................................................................81
6.3.5 Server .........................................................................................................82
6.3.6 Client ..........................................................................................................83
6.3.7 Giao tiếp giữa client và server .....................................................................84

CHƯƠNG 7 ......................................................................................................86
HƯỚNG PHÁT TRIỀN CHƯƠNG TRÌNH......................................................86
7.1 Kiến trúc mới RMI ............................................................................................86
7.1.1 Đặc điểm RMI ............................................................................................86
7.1.2 Phát triển mã cho RMI ................................................................................86
7.2 Kết quả chương trình .........................................................................................87
7.2.1 Những điểm chương trình làm được............................................................87

7.2.2 Những điểm chưa làm được và hướng giải quyết.........................................88
7.3 Hướng phát triển chương trình ...........................................................................88

TÀI LIỆU THAM KHẢO .................................................................................90
NHẬN XÉT CỦA GIÁO VIÊN ........................................................................91

2


CHƯƠNG 1
GIỚI THIỆU NỘI DUNG ĐỀ TÀI

1.1 Hệ thống quản lý thư viện
1.1.1 Nhiệm vụ của một hệ thống quản lý thư viện
Một hệ thống quản lý thư viện có nhiệm vụ quản lý kho tư liệu mà thư
viện hiện có, phục vụ công tác tra cứu, nghiên cứu của độc giả. Hệ thống quản lý
thư viện phải nắm giữ được số lượng sách trong thư viện, phân loại sách theo
từng chương mục cụ thể để có thể dễ dàng mã hoá, tiện cho việc truy tìm. Ngoài
ra hệ thống cũng phải biết được tình trạng tài liệu hiện tại, phải được cập nhật
thông tin mỗi khi bổ sung các tư liệu mới hoặc thanh lý các tư liệu không có giá
trị. Đối với việc phục vụ tra cứu, hệ thống phải đưa ra mục lục phân loại các sách
có trong thư viện, sao cho độc giả dễ dàng tìm được những tư liệu cần thiết, bên
cạnh đó hệ thống cũng phải quản lý được những độc giả có yêu cầu mượn tư liệu.
Thông thường việc phân loại sách và quản lý độc giả là những công việc phức
tạp nhất trong hệ thống quản lý thư viện.
1.1.2 Tổ chức của đa số hệ thống thư viện hiện nay

Các hệ thống thư viện của chúng ta hiện nay thường được tổ chức và hoạt
động theo cách như sau:
a. Bổ sung, bảo quản và thanh lý sách

Sách nhập về được đăng ký tại phòng phân loại – biên mục. Tại đây cuốn
sách sẽ được xem xét nội dung, thể loại qua đó phân loại cuốn sách theo chuyên
mục sẵn có trong thư viện. Đồng thời cuốn sách cũng được gắn với một mã số để
tiện cho việc tìm kiếm, qua mã số này nhân viên thư viện có thể biết được cuốn
sách nằm ở vị trí nào trong kho lưu trữ. Đôi khi một cuốn sách có hai loại mã số,
một để phục vụ cho việc sắp xếp và tìm kiếm trong kho, một để quản lý về thời
gian sách nhập vào thư viện, tiện cho việc bảo quản, thanh lý. Sau khi cuốn sách
có mã số, nó sẽ được cung cấp một thẻ mục lục, trên đó thường có tên sách, nội
dung, tác giả, nhà xuất bản, năm xuất bản… Đối với hệ thống tra cứu sách thủ

3


công, thẻ mục lục là một tấm cạc được đặt trong hệ thống mục lục của thư viện.
Với các hệ thống có trang bị máy tính, đó là những record trong cơ sở dữ liệu của
thư viện. Theo thời gian, những cuốn sách bị hư hỏng hoặc nội dung không còn
phù hợp nữa sẽ được đem ra thanh lý, loại bỏ khỏi hệ thống.
b. Phục vụ bạn đọc
Khi có nhu cầu tìm hiểu tư liệu, độc giả sẽ đăng ký làm thẻ với thư viện và
sẽ được cấp phiếu đăng ký. Sau khi điền một số thông tin cá nhân và được chứng
nhận của cơ quan có thẩm quyền, phiếu đăng ký sẽ được thư viện xác nhận và
lưu giữ, đồng thời độc giả cũng được cấp thẻ thư viện. Trên thẻ thư viện có mã số
bạn đọc, qua đó thư viện có thể tìm lại thông tin về độc giả nhanh chóng khi cần
thiết, và thư viện sẽ quản lý bạn đọc qua mã số này.
Khi có nhu cầu nghiên cứu, bạn đọc sẽ dò tìm mã số của tư liệu mình
muốn qua hệ thống mục lục theo chủ đề, nội dung, tác giả bằng tay hoặc bằng
máy tính (nếu có). Tiếp theo bạn đọc phải đăng ký mượn sách với thư viện qua
phiếu mượn sách. Trên đó phải ghi rõ tên và mã số bạn đọc, tên và mã số sách
mượn, ngày mượn và ngày trả. Sau khi xác nhận tính đúng đắn của phiếu, nhân
viên thư viện sẽ căn cứ vào mã số cuốn sách để tìm ra cuốn sách trong kho tư liệu

và đem cho độc giả. Định kỳ, nhân viên thư viện phải kiểm tra lại các phiếu
mượn sách để thống kê số sách mượn, sách còn trong thư viện, qua đó thông báo
cho độc giả biết cuốn sách nào đã hết, lúc nào sẽ có khi độc giả yêu cầu. Nhân
viên cũng phải kiểm tra những độc giả nào vi phạm quy chế, chẳng hạn đã mượn
quá số lượng sách cho phép, sách mượn quá hạn trả, làm mất sách để có biện
pháp xử lý thích ứng.
c. Nhược điểm của hệ thống quản lý thư viện trên :
Hệ thống trên dùng nhiều đến giấy tờ, vì vậy việc bảo quản, truy tìm mất
nhiều thời gian. Hệ thống dễ mắc phải sai sót cũng như chưa tiện lợi với bạn đọc.
Công việc quản lý độc giả rất khó khăn khi số lượng bạn đọc lớn, bởi việc kiểm
tra thời gian mượn trả sách, số lượng sách mượn là thủ công, vì vậy rất dễ thất
thoát tư liệu. Việc phân loại sách và tạo ra mục lục cần khá nhiều thời gian. Ngay

4


cả đối với một số thư viện dùng hệ thống máy tính để phục vụ tra cứu và quản lý
cũng còn nhiều nhược điểm như: giao diện người sử dụng phức tạp, phần mềm
chỉ sử dụng trên máy đơn hoặc mạng cục bộ, tổ chức cơ sở dữ liệu thường bị hạn
chế về dung lượng cũng như về tốc độ vì đa số không phải là những cơ sở dữ liệu
chuẩn của các hãng phần mềm. Mặc dù có máy tính thì việc đăng ký mượn sách
cũng phải tiến hành bằng tay do đó chưa tận dụng hết được các ưu điểm của máy
tính.
1.1.3 Hướng phát triển của hệ thống thư viện hiện đại
Ngày nay cùng với sự phát triển của máy tính, sự ra đời của mạng Internet,
các hệ thống thư viện sẽ có nhiều đổi mới. Đa số các công việc sẽ được tiến hành
trên máy tính, từ việc phân loại, tra cứu cho đến mượn sách sẽ được tiến hành
trên máy tính với các ưu điểm là nhanh hơn, chính xác hơn và thuận lợi hơn.
Người ta có thể không cần phải đến thư viện để tra cứu sách mà có thể phải làm
tại nhà, với điều kiện là máy tính phải được kết nối vào mạng có hệ thống máy

tính của thư viện. Việc quản lý bạn đọc tiến hành bằng máy tính sẽ đơn giản và
chính xác hơn nhiều. Thậm chí, có thể thực hiện một thư viện "từ xa", nghĩa là
bạn đọc có thể đọc cuốn sách mà mình thích ngay tại nhà, thông qua mạng vi
tính. Mặt khác, với sự hỗ trợ của công nghệ mutlimedia trên máy tính, độc giả có
thể sẽ không còn cảm thấy khô khan khi đọc những trang sách trên máy tính nữa,
mà có thể có các đoạn nhạc, phim, ảnh và từ điển thuật ngữ liên kết, tương tự như
các trang Web sống động…
1.2 Hướng thực thi của đề tài
Hiện nay có rất nhiều các phần mềm phục vụ cho việc quản lý thư viện
được viết bằng nhiều ngôn ngữ khác nhau. Từ những phần mềm đầu tiên chỉ có
thể sử dụng trên máy đơn, nghĩa là cả cơ sở dữ liệu là chương trình truy xuất phải
được cài đặt trên cùng một máy đến các phần mềm sử dụng trên mạng, nghĩa là
các máy truy xuất tới cùng một cơ sở dữ liệu được cài đặt sẵn trên một máy thì
những phần mềm này đều mắc phải những nhược điểm là phải có phần mềm đi

5


kèm mới sử dụng được. Và thường thì những phần mềm này do thư viện quản lý,
vì thế độc giả muốn sử dụng thì phải đến thư viện.
Nếu như chúng ta có thể truy xuất cơ sở dữ liệu của thư viện thông qua
mạng máy tính mà không cần phải cài đặt bất cứ phần mềm chuyên biệt nào thì
thật thuận tiện. Ngày nay nhờ sự tiến bộ của các ngôn ngữ lập trình và các tiện
ích trên mạng, chúng ta có thể làm được điều này. Và đề tài sẽ đưa ra một hướng
thực thi việc truy xuất cơ sở dữ liệu từ xa thông qua một công cụ hổ trợ sẵn của
mạng Internet là các trình duyệt Web. Việc hiện thực sẽ được áp dụng đối với hệ
thống thư viện như là một thí dụ điển hình.

6



CHƯƠNG 2
PHÂN TÍCH VÀ LỰA CHỌN MÔ HÌNH SỬ DỤNG

2.1 Các cấu hình cơ sở dữ liệu Client/Server
Nhìn chung mọi ứng dụng cơ sở dữ liệu đều bao gồm các phần
 Thành phần xử lý ứng dụng (Application processing components).
 Thành phần phần mềm cơ sở dữ liệu (Database software components).
 Bản thân cơ sở dữ liệu (The database itself).
Các mô hình về xử lý cơ sở dữ liệu khác nhau là bởi các trường hợp của ba
loại thành phần nói trên định vị ở đâu. Thông thường có năm mô hình kiến trúc
dựa trên cấu hình phân tán về truy nhập dữ liệu của hệ thống máy tính
Client/Server:
 Mô hình cơ sở dữ liệu tập trung (Centralized database model).
 Mô hình cơ sở dữ liệu theo kiểu file-server (File – server database
model).
 Mô hình xử lý từng phần cơ sở dữ liệu (Database extract processing
model).
 Mô hình cơ sở dữ liệu Client/Server (Clent/Server database model).
 Mô hình cơ sở dữ liệu phân tán (Distributed database model)
2.1.1 Mô hình cơ sở dữ liệu tập trung (Centralized database model)
Trong mô hình này các thành phần xử lý ứng dụng, phần mềm cơ sở dữ liệu
và bản thân cơ sở dữ liệu đều ở trên cùng một bộ xử lý.
Hầu hết công việc xử lý luồng thông tin chính được thực hiện bởi nhiều tổ
chức mà vẫn phù hợp với mô hình tập trung.

7


2.1.2 Mô hình cơ sở dữ liệu theo kiểu file– server (File– server database

model)
Trong mô hình cơ sở dữ liệu theo kiểu file – server các thành phần ứng
dụng và phần mềm cơ sở dữ liệu ở trên một hệ thống maý tính và các file vật lý
tạo nên cơ sở dữ liệu nằm trên hệ thống máy tính khác, thường được dùng trong
môi trường cục bộ, trong đó một hay nhiều hệ thống máy tính đóng vai trò của
server, lưu dữ các file dữ liệu cho hệ thống máy tính khác thâm nhập tới. Trong
môi trường file– server, phần mềm mạng được thi hành và làm cho phần mềm
ứng dụng cũng như phần mềm cơ sở dữ liệu trên hệ thống của người dùng cuối
coi các file hoặc cơ sở dữ liệu trên file server thực sự như là trên máy tính chính
họ.
Mô hình file server rất giống với mô hình tập trung. Các file cơ sở dữ liệu
nằm trên máy khác với các thành phần ứng dụng và phần mềm cơ sở dữ liệu. Tuy
nhiên các thành phần ứng dụng và các phần mềm cơ sở dữ liệu có thể có cùng
một thiết kế để vận hành một môi trường tập trung. Thực chất phần mềm mạng
đã làm cho phần mềm ứng dụng và phần mềm cơ sở dữ liệu tưởng rằng chúng
đang truy xuất cơ sở dữ liệu trong môi trường cục bộ. Một môi trường như vậy
có thể phức tạp hơn mô hình tập trung bởi vì phần mềm mạng có thể phải thực
hiện cơ chế đồng thời cho phép nhiều người sử dụng cuối có thể truy nhập vào
cùng cơ sở dữ liệu.
2.1.3 Mô hình xử lý từng phần cơ sở dữ liệu (Database extract processing
model)
Trong một mô hình khác trong do một cơ sở dữ liệu ở xa có thể được truy
cập bởi phần mềm cơ sở dữ liệu, được gọi là xử lý dữ liệu từng phần. Với mô
hình này, người sử dụng có thể tại một máy tính cá nhân kết nối với hệ thống
máy tính ở xa nơi có dữ liệu mong muốn. Người sử dụng sau đó có thể tác động
trực tiếp đến phần mềm chạy trên máy ở xa và tạo yêu cầu để lấy dữ liệu từ cơ sở
dữ liệu đó. Người sử dụng cũng có thể chuyển dữ liệu từ máy tính ở xa về chính

8



máy tính của mình và vào đĩa cứng và có thể thực hiện việc sao chép bằng phần
mềm cơ sở dữ liệu trên máy cá nhân.
Với cách tiếp cận này, người sử dụng phải biết chắc chắn là dữ liệu nằm ở
đâu và làm như thế nào để truy nhập và lấy dữ liệu từ một máy tính ở xa. Phần
mềm ứng dụng đi kèm cần phải có trên cả hai hệ thống máy tính để kiểm soát để
kiểm soát sự truy cập và chuyển dữ liệu giữa hai hệ thống. Tuy nhiên, phần mềm
cơ sở dữ liệu chạy trên hai máy không cần biết rằng việc xử lý cơ sở dữ liệu từ xa
đang diễn ra vì người sử dụng tác động tới chúng một cách độc lập.
2.1.4 Mô hình cơ sở dữ liệu Client/Server (Client/Server database model)
Trong mô hình cơ sở dữ liệu Client/Server, cơ sở dữ liệu nằm trên một máy
khác với một máy có thành phần xử lý ứng dụng. Những phần mềm cơ sở dữ liệu
được tách ra giữa hệ thống Client chạy các chương trình ứng dụng và hệ thống
Server lưu trữ dữ liệu.
Mới nhìn, mô hình cơ sở dữ liệu Client/Server có vẻ giống như mô hình
file-server, tuy nhiên mô hình Client/Server có rất nhiều thuận lợi hơn mô hình
file-server. Với mô hình file- server, thông tin gắn với sự truy cập cơ sở dữ liệu
vật lý phải chạy trên toàn mạng. Một giao tác yêu cầu nhiều sự truy cập dữ liệu
có thể gây ra tắc nghẽn lưu lượng truyền trên mạng.
 Fron-end software
Front-end software được chạy trên một máy tính cá nhân hoặc một
workstation và đáp ứng yêu cầu đơn lẽ riêng biệt, phần mềm này đóng vai trò của
Client trong ứng dụng cơ sở dữ liệu Client/Server và thực hiện các chức năng
hướng tới nhu cầu người dùng cuối cùng
 Back-end software
Phần mềm này bao gồm phần mềm cơ sở dữ liệu Client/Server và phần
mềm mạng chạy trên máy đóng vai trò là Server cơ sở dữ liệu.

9



2.1.5 Mô hình cơ sở dữ liệu phân tán (Distributed database model)
Cả hai mô hình File – Server và Client/Server đều giả định là dữ liệu nằm
trên một bộ xử lý và chương trình ứng dụng truy nạp dữ liệu nằm trên một máy
khác, còn mô hình cơ sở dữ liệu phân tán lại giả định bản thân cơ sở dữ liệu có ở
trên nhiều máy khác nhau.
2.2 Mô hình được sử dụng
Qua các mô hình cơ sở dữ liệu trên, dễ thấy mô hình Client/Server là mô
hình phù hợp các yêu cầu đặt ra nhất. Vấn đề ở đây là chúng ta sẽ hiện thực mô
hình này bằng ngôn ngữ gì và hiện thực như thế nào. Các ngôn ngữ lập trình có
thể xây dựng những giao diện đẹp và thuận tiện thì thường không có cơ sở dữ
liệu tốt đi kèm, và thường hạn chế khả năng khi sử dụng trên mạng diện rộng.
Các phần mềm về cơ sở dữ liệu có thể sử dụng mô hình Client/Server thì thường
đòi hỏi có tính chuyên nghiệp cao.
Hầu hết các biện pháp này thì đều có nhược diểm là phải có sự cài đặt trên
máy đơn trước khi móc nối với Server. Ngôn ngữ Java đưa ra một hướng giải
quyết đơn giản các vấn đề trên. Với việc thực thi các Apllet nhúng trong trang
Web, chúng ta không cần có bất cứ một sự cài đặt nào mà vẫn sử dụng được các
tính năng của chương trình (Với điều kiện là có một trình duyệt Web và máy tính
đã được nối mạng). Do tính năng mạng là được cung cấp sẵn nên Java có thể
dùng trên mạng Internet dễ dàng. Với tính độc lập nền, người sử dụng không
phải e ngại việc phần mềm không tương thích với hệ điều hành của mình. Đặc
biệt là Java có thể kết nối với hầu hết các cơ sở dữ liệu chuẩn của các hãng phần
mềm thông qua JDBC, vì vậy cơ sở dữ liệu của hệ thống có thể xây dựng bằng
hệ cơ sở dữ liệu chuẩn, chẳng hạn Oracle để quản lý dữ liệu một cách chặt chẽ
(Ở đây chúng ta sẽ dùng cơ sở dữ liệu là Ms Access trong môi trường Window).
Mô hình quản lý thư viện được xây dựng như sau: người quản lý thư viện sẽ
thông qua một Applet để quản lý hệ thống thư viện. Chương trình này sẽ cho
phép administrator bổ sung sách vào thư viện, hủy bỏ sách, đăng ký bạn đọc,
quản lý việc mượn sách của bạn đọc. Nếu thực hiện việc đọc sách từ xa, thì


10


chương trình này sẽ tạo ra "tài khoản" để độc giả có thể truy cập tư liệu qua
mạng. Cũng có thể đưa chức năng quản lý, phân loại các trang Web vào hệ thống
dữ liệu của thư viện. Người sử dụng sẽ tra cứu hệ thống mục lục của thư viện
thông qua một applet trên một trang Web. Như vậy chỉ cần một trình duyệt hiểu
Java là người đọc có thể tra cứu mục lục thư viện tại bất cứ đâu. Applet này sẽ
tạo ra hệ thống menu cho phép người độc lựa chọn cách thức tra cứu sách: theo
tên sách, theo tác giả, nhà xuất bản, theo nội dung,… Tuy nhiên nếu người đọc
muốn mượn sách về nhà, thì phải liên hệ với người quản lý thư viện và thực hiện
việc làm thủ tục mượn sách thông qua Applet của Administrator đã nói ở trên.
Tương lai nếu chúng ta lưu trữ tất cả các tư liệu trên đĩa từ thì có thể cho phép
người đọc đọc tư liệu từ xa qua applet này sau khi người đọc đã đăng ký và được
cấp một mật khẩu cho phép truy cập.
2.2.1 Server
Đây là một chương trình Server đúng nghĩa. Chương trình này có nhiệm vụ
sẽ lắng nghe và phục vụ các yêu cầu của User và Administrator, là cầu nối trung
gian tới cơ sở dữ liệu.
2.2.2 Database
Cơ sở dữ liệu sẽ gồm hai phần : một dùng để quản lý sách và một dùng
quản lý độc giả. Với việc sử dụng Access để tạo ra cơ sở dữ liệu thì nói chung
không có vấn đề gì phức tạp. Việc thiết kế chi tiết cơ sở dữ liệu sẽ được đưa ra
trong phần sau.

11


CHƯƠNG 3

CƠ CHẾ TRUYỀN NHẬN TRONG JAVA

3.1 Các kiến thức cơ bản về Networking
Các máy tính chạy trên mạng Internet truyền thông với nhau dùng các
Protocol TCP, UDP. Mô hình mạng 4 lớp được mô tả bằng hình vẽ dưới đây:
Application
(HTTP,ftp,telnet)
Transport
(TCP/IP,UDP)
Network
(IP,…)
Link
(device driver)

Hình 3.1: Mô hình mạng
Khi viết các chương trình Java có truyền thông qua mạng, điều này có
nghĩa là ta đang lập trình ở lớp application. Nhìn chung, ta không cần quan tâm
tới các protocol TCP và UDP. Thay vì vậy, có thể dùng các lớp trong package
java.net. Các lớp này cung cấp việc truyền thông qua mạng độc lập hệ thống. Tuy
nhiên, cần hiểu rõ sự khác biệt giữa TCP và UDP để xác định rõ những lớp nào
trong thư viện Java sẽ sử dụng.
Khi hai chương trình muốn truyền dữ liệu cho nhau một cách đáng tin cậy,
chúng thiết lập một connection và gửi data qua lại thông qua connection đó.
Giống như các công ty điện thoại, TCP đảm bảo rằng data được gửi từ một đầu
connection tới đầu kia không mất mát và đúng thứ tự (nếu không, một lỗi sẽ được
thông báo).

12



Định nghĩa: TCP là một protocol dựa trên connection, cung cấp các data
flow tin cậy giữa 2 máy tính.
Những ứng dụng yêu cầu một kênh truyền point-to-point, đáng tin cậy đều
dùng TCP. Hyper Text Transfer Protocol (HTTP), File Transfer Protocol (ftp), và
Telnet (telnet) là những ứng dụng đòi hỏi một kênh truyền đáng tin cậy. Thứ tự
gửi và nhận phải đảm bảo là điều kiện buộc phải có đối với những ứng dụng này
khi dùng HTTP để đọc từ một URL, dữ liệu cần phải nhận được theo đúng thứ tự
mà nó được gửi đi, nếu không mọi thứ sẽ đảo lộn cả lên.
UDP protocol cung cấp việc truyền thông không đảm bảo giữa hai ứng
dụng trên mạng. UDP không dựa trên connection như TCP. UDP gửi những
package độc lập với nhau, gọi là datagrams, từ ứng dụng này tới ứng dụng kia.
Việc gửi những datagram giống như việc gửi thư thông qua bưu điện. Thứ tự
phân phát không quan trọng và khộng đảm bảo, và các message độc lập với nhau.
Định nghĩa: UDP là một protocol, gửi những package độc lập, gọi là các
datagrams, từ máy này tới máy khác, không đảm bảo chắc chằn sẽ thành công.
UDP không dựa trên connection như TCP.
Ports: Nói một cách tổng quát, một máy tính nối mạng là một connection
vật lý đối với mạng đó. Tất cả dữ liệu gửi cho một máy tính thông qua conection
đó. Tuy nhiên, dữ liệu có thể được gửi cho những ứng dụng khác nhau trên máy
đó. Vậy thì làm cách nào máy tính biết ứng dụng nào sẽ nhận dữ liệu được gửi
đến? Điều này được giải quyết thông qua việc sử dụng Ports, mỗi ứng dụng mạng
có một port tương ứng.
Dữ liệu truyền qua mạng có kèm theo thông tin địa chỉ nhằm xác định máy
tính và port đích. Mỗi máy tính được xác định bằng một địa chỉ IP 32-bits, IP
protocol dùng địa chỉ này để phân phát dữ liệu đúng cho từng máy. Port được xác
định bằng một số 16-bits, các protocol TCP và UDP dùng port number để phân
phát data tới đúng cho từng ứng dụng.
Trong việc truyền nhận data dựa trên connection, một ứng dụng thiết lập
môt connection với một ứng dụng khác bằng cách gắn một socket cho mỗi port


13


number. Điều này có ý nghĩa đăng ký ứng dụng với hệ thống để ứng dụng có thể
nhận tất cả data được gửi đến cho port đó. Không thể có hai ứng dụng dùng
chung một port. Mọi cố gắng gắn một socket với một port đã dùng đều sẽ thất
bại.
Trong việc truyền nhận data dựa trên datagram, datagram chứa port number
của ứng dụng đích mà nó gửi tới.
Định nghĩa: Các protocol TCP và UDP dùng ports để map incoming data
cho một quá trình đang chạy trên một máy tính.
Port number nằm trong khoảng 0-65535 (vì ports được biểu diễn bằng số
nguyên 16-bits). Những port nằm trong khoảng 0-1023 là những port dành riêng
cho những dịch vụ quen thuộc như HTTP, FTP và các dịch vụ của hệ thống
(những port này gọi là các well-known port). Những ứng dụng mạng của bạn
không nên dùng những port trong khoảng này.
app

app
port

port

app
port

app
port

TCP/IP

packet
port

data

Hình 3.2: Mô hình TCP/IP
Thông qua những lớp trong package java.net, những chương trình Java có
thể dùng TCP hay UDP để truyền nhận data qua Internet. Các lớp URL,
URLConnection, Socket và ServerSocket dùng TCP. Các lớp DatagramPacket và
DatagramServer dùng UDP.
Java sử dụng HTTP để phân phát các Applet đa nền, có thể chạy trong môi
trường Browser. Nhìn chung, đây là công dụng chính của Java: tạo ra các trang
HTML có nội dung động. Tuy nhiên, đây chỉ là mặt ngoài của cái mà Java có thể
làm được thực sự. Các Net-package và kiến trúc Java cho phép nó được dùng

14


như một kiến trúc động, có thể chủ động dùng nguồn code, data, và input thông
qua Internet. Bằng cách tổng hợp các Java-package, programmers có thể phối
hợp chương trình của mình cùng các protocol Telnet, FTP, NNTP, WWW để tạo
ra các ứng dụng mạng, thay vì chỉ chạy trên một máy như trước đây.
Java tương tác với Internet theo cách riêng của nó, dữ liệu kéo về dưới dạng
các file bytecode (.class), các file khác như ảnh, audio hay input từ việc tương tác
với các user khác. Chức năng này được giao tiếp chính thông qua mội trường
Browser support Java, mặc dù vậy interpreter cũng có thể sử dụng các connection
mạng. Nhằm đáp ứng hai khả năng quan trọng là tính có thể mở rộng và tính đa
nền, Java đã cung cấp một kiến trúc hướng đôí tượng không bị ràng buộc bởi
việc hiện thực chương trình được compile từ trước khi thực thi (dạng file.EXE).
Ngoài ra, để đáp ứng được những yêu cầu của người sử dụng, Java phải đảm bảo

tính an toàn, hiệu xuất cao. Tuy nhiên, cho đến thời điểm hiện tại, tốc độ thực thi
một chương trình Java còn quá chậm. Hy vọng điều này sẽ được cải thiện hơn
khi có những phần cứng support Java riêng biệt.
Các tính chất an toàn, đa nền, . . .của ngôn ngữ Java được giải quyết bằng
interpreted design. Bằng cách Compile code ra dạng máy ảo, và tạo ra memory
layout tại thời điểm chạy chương trình thay vì tại thời điểm compile, Java có khả
năng truy xuất điều kiện của code trước khi nó được thực thi trên một máy client.
Tất cả những ưu điểm trên phải trả giá cho hiệu suất thực thi chương trình
thấp. Tuy nhiên, điều này đã được khắc phục phần nào bằng cách tạo code trung
gian dưới dạng bytecode, cung cấp khả năng thực hiện chương trình Multithread
khá dễ dàng, và đặc biệt hơn là chiến lược quản lý bộ nhớ với việc dọn rác tự
động. Sau đây là một số hiểu biết cơ bản về networking, Threads,
Synchronization, Exceptions và Java-Security do ngôn ngữ Java cung cấp.

15


3.2 Networking
Việc sử dụng những khả năng networking do Java support khá dễ dàng so
với C và C++. Applet được nhúng trong các file HTML. Để chạy những Applet
qua mạng, việc trước tiên cần là là load các trang HTML này về máy cục bộ. Các
applet được nhúng trong các trang HTML thông qua phần khai báo APPLET.
Ngoài những lớp được hiện thực bới applet, những lớp thư viện khác do Browser
cung cấp.
Việc load các file ảnh và file audio được thực hiện thông qua lớp URL
(package java.net). Lớp này biểu hiện một Uniform Resource Locator, là địa chỉ
của tài nguyên nào đó trên mạng. Lấy ví dụ, để load một file ảnh từ mạng,
chương trình Java đầu tiên cần tạo một URL chứa địa chỉ chỉ tới file ảnh đó, sau
đó dùng một số hàm cần thiết để connect và truy xuất file ảnh đó.
Nhìn chung, điểm nổi bật của Networking do Java mang lại là tính tiện lợi

và dễ sử dụng. Điều này có thể hiểu rõ hơn trong phần giới thiệu về URLs,
Socket ở những phần sau của tài liệu này.
3.2.1 Giao tiếp giữa phần hiện thực client và Browser ở máy local
 URLs
URL là từ viết tắt của Uniform Resource Locator, là một tham chiếu (một
địa chỉ) tới một tài nguyên trên Internet. Có thể tạm hiểu URL là tên của một file
trên mạng vì hầu hết các URL tham chiếu tới 1 file trên máy nào đó trên mạng.
Tuy nhiên, bạn nên nhớ rằng URL có thể tham chiếu tới bất kỳ tài nguyên mạng
nào, chẳng hạn như database queries và command output.
Sau đây là một ví dụ về URL : />Tất cả các URL đều có 2 phần tử chính :
1.Kiểu Protocol.
2.Tên tài nguyên.

16


Cách dễ nhất để tạo một URL là dùng một chuỗi làm đối số cho URL
constructor:
URL u = new URL("");
Đây là một URL tuyệt đối vì nó đặc tả toàn bộ tên tài nguyên. Một
constructor hữu dụng khác là một URL tương đối :
URL data = new URL(u,"conference/conference.html");
URL này đặc tả file conference.html, nằm trong thư mục conference của
URL u.
Trong chương trình, URL được sử dụng để load file chứa các nhóm hiện
đang tồn tại, file chứa danh sách các user trong một nhóm, log file (file chứa thời
điểm các user login, logout, các nhóm được tạo ra, delete), file help. Để phát
triển đề tài này thành các đề tài khác yêu cầu thêm một số chức năng như truyền
nhận file, truy xuất cơ sở dữ liệu và cập nhật ngay ở client khi dữ liệu ở server
có thay đổi, cần phải có những kiến thức thêm nữa về cách sử dụng URL trong

Java.
 Applet Context
Một applet chạy trong một browser như Netscape hay Apllet viewer. Một
applet có thể yêu cầu browser làm việc gì đó cho nó, ví dụ như, fetch một file
audio, show một trang Web khác, ... Tùy vào loại browser mà có thể thực hiện
yêu cầu này hoặc không. Để liên kết với browser, applet gọi hàm
getAppletContext. Hàm này trả về một đối tượng kiểu AppletContext.
3.2.2 Sockets
Ta sử dụng các URLs và URLConnections để truyền thông qua mạng ở cấp
cao và dành cho một mục đích đặc biệt: truy xuất tài nguyên trên Internet. Đôi
khi chương trình của ta đòi hỏi việc truyền thông qua mạng ở mức thấp hơn, ví
dụ như khi ta viết một ứng dụng Client/Server (cụ thể là phần mềm này đã thực
hiện điều đó).

17


Trong những ứng dụng client/server, server cung cấp một dịch vụ nào đó,
chẳng hạn như xử lý các database queries, gửi giá cả chứng khoán hiện tại, . ..
Client dùng dịch vụ do server cung cấp để hiển thị kết quả cho User, tạo ra những
chỉ dẫn cần thiết cho người đầu tư, . . . Việc truyền dữ liệu giữa client và server
phải đáng tin cậy, không bị mất và không được tới sai thứ tự do server gửi.
Một Socket là một end-point của một liên kết giữa hai chương trình chạy
trên mạng. Các lớp socket được sử dụng để thể hiện connection giữa một chương
trình client và một chương trình Server. Package java.net cung cấp hai lớp:
Socket và ServerSocket tương ứng với client và server.
Chương trình Server thường listen ở một port riêng biệt, đợi các connection
request từ các chương trình client. Khi có một connection request, client và
server thiết lập một connection mà qua đó chúng sẽ trao đổi dữ liệu với nhau.
Suốt quá trình connecton, client được gán cho một port number cục bộ, và bind

một socket cho nó. Client truyền (nhận) dữ liệu cho server bằng các ghi (đọc)
socket. Tương tự, server nhận một port number local mới (nó cần một port
number mới để nó có thể tiếp tục listen các connetion request khác ở port ban
đầu). Server cũng bind một socket cho port cục bộ của nó và liên lạc với client
tương ứng thông qua socket này.
Nhìn chung, các bước cần tiến hành để dùng socket ở phía client như sau:
1. Mở một socket.
2. Mở input stream và outputstream ứng với socket đó.
3. Read và write tới stream tùy thuộc vào nghi thức của server
4. Đóng các stream.
5. Đóng socket.
Chỉ có bước ba là khác nhau giữa các client, do dựa vào server. Các bước
còn lại hầu như giống nhau.
Đối với Server, khi sinh ra socket ứng với client yêu cầu connect, server
dựa vào socket và các input, output stream ứng với socket này để thực hiện việc

18


read, write dữ liệu. Điều này hoàn toàn giống như cách thức đã mô tả ở phần sử
dụng soclet ở Client được mô tả ở phần trên.
Cụ thể là các việc sau :
1. Mở một input và output stream ứng với socket.
2. Read và write tới socket.
Trong đề tài, có nhiều client đồng thời đưa ra các connection request với
server tại port mà server listen (port 4444). Có 2 cách để giải quyết vấn đề này :
1. Các connection request được xếp hàng, và Server phải accept các
connection tuần tự.
2. Phục vụ các connection request đồng thời bằng việc dùng các thread,
Mỗi thread xử lý một connection.

Đề tài đã chọn cách thứ hai để hiện thực vì nó hợp lý hơn: mọi user cần
phải được xử lý bình đẳng như nhau.
Giải thuật cho phần này như sau :
while (true) {
accept a connection ;
create a thread to deal with the client ;
}
Thread được sinh ra sẽ read và write tới connection ứng với connection đó
khi cần thiết.
Các lớp socket được sử dụng trong chương trình: (Phần này dành cho người
muốn tìm hiểu kỹ đề tài)

19


 Lớp Socket
public Socket(String host, int port) throws UnknownHostException,
IOException.
Hàm constructor, tạo ra một stream socket và connect nó với port được đặc
tả bởi thông số port, trên host đặc tả bởi thông số host. Ngầm định là tạo ra
stream socket (ngoài ra có thể tạo ra datagram socket nếu đặc tả thêm thông số).
Trong chương trình, thông số InetAddress được lấy bằng việc gọi hàm gethost
sau khi có chuỗi URL chứa chương trình Client.
public InetAddress getInetAddress()
Trả về remote IP address mà socket này connect với. Từ trị trả về này, có
thể gọi hàm getHostName từ lớp InetAddress để lấy hostName tương ứng. Hàm
này được gọi trong chương trình khi server cần lấy hostName của client connect
với nó.
public InputStream getInputStream() throws IOException
Trả về một input stream thực hiện việc đọc dữ liệu từ socket này.

public OutputStream getInputStream() throws IOException
Trả về một output stream thực hiện việc ghi dữ liệu tới socket này. Lớp
ServerSocket
public ServerSocket(int port) throws IOException
Tạo ra một server socket trên port được đặc tả bởi thông số port. Nếu port =
0 thì tạo ra một server socket trên bất kỳ port nào trống.
Chiều dài hàng đợi lớn nhất cho các yếu cầu connection là 50. Nếu một yêu
cầu connection đến trong khi hàng đợi đầy, thì yêu cầu đó sẽ bị từ chối.
public Socket accept() throws IOException
Listen một yêu cầu connection đối với socket này và chấp nhận nó. Phương
thức này bị block cho tới khi connection được thực hiện.

20


Public void close() throws IOException
Close socket lại (áp dụng cho cả Socket và ServerSocket)
 Các Stream
Class BufferedInputStream
Là một input stream. Public BufferedInputStream(InputStream in).
Hàm constructor, tạo ra một input stream có đệm để đọc data từ input
stream được khai báo. Kích thước beffer ngầm định là 512-byte. Ta có thể khi
báo kích thước buffer bằng constructor khác.
Class DataInputStream
Ứng dụng sử dụng một data input stream để đọc các kiểu dữ kiệu nguyên
thủy của Java từ một input stream lớp dưới , với đặc tính độc lập máy. Ứng dụng
dùng data out put stream để ghi data mà sau này sẽ được đọc bởi một data input
stream.
public DataInputStream(InputStream in)
Hàm constructor, tạo ra một data input stream để đọc data từ input stream

được khai báo. Trong chương trình, sử dụng thông InputStream là một
BufferedInputStream được sinh ra từ input stream nhận được từ socket tương
ứng.
public final String readLine() throws IOException
Đọc hàng text kế từ data input stream gọi nó. Phương thức này đọc thành
công các bytes từ input stream lớp dưới cho đến khi hết một hàng. Ký hiệu chấm
dứt dòng được xác định bằng các ký tự sau: ký tự CR ('\r'), ký tự newline ('\n'),
một ký tự CR theo sau bởi một ký tự newline, hay kết thúc của stream input .
Phương thức này bị block khi xảy ra một trong ba tình huống sau: một ký tự
newline được đọc, một ký tự CR và byte đi liền sau nó được đọc (để xem có phải
là ký tự newline hay không), dò thấy dấu hiệu chấm dứt một stream, hay mot
IOException được sinh ra.

21


Class PrintStream
Một print stream hiện thực một output stream filter, cung cấp các phương
thức tiện lợi cho việc print các kiểu dữ liệu khác nhau.
public PrintStream(OutputStream out)
Xây dựng một print stream mà sẽ viết output của nó tới một output stream
lớp dưới được đặc tả.
public void println(String s)
Print một chuỗi tới output stream lớp dưới của Print Stream gọi hàm này.
 Java Security
Các Java-application không thực hiện tính bảo mật như Java-applet. Với
một Java-application, nó có thể đọc và ghi file, giao tiếp với thiết bị, connect với
các socket, . . .Nhưng với Java-applet thì không như vậy. Có nhiều việc mà Javaapplet không được phép làm, và nhiều tài nguyên mà Java-applet chỉ nên hạn chế
truy xuất.
Các applet có thể quan hệ tới mô hình Client/Server cổ điển theo cách :

Web server là server của applet. Nó gửi applet tới máy client. Máy client là máy
trên đó client chạy thực sự. Điều đó có nghĩa là khi ta browse một trang HTML
có nhúng applet, máy của ta là client. Điều này làm rõ việc xác định những việc
mà applet không được phép làm.
Nếu một applet được load qua mạng, nó không được phép :
1. Đọc , ghi , xóa, đổi tên file, tạo thư mục, liệt kê nội dung thư mục , kiểm
tra sự tồn tại của file, . . . trên client file system.
2. Khai báo bất kỳ hàm điều khiển mạng nào, định nghĩa các lớp trên client
file system, thiết lập connection với một chương trình chạy trên một máy khác
máy chứa applet đó.
Những điều trên dẫn đến hạn chế của chương trình: chỉ có thể đặt Server
cùng một máy với Client, và cũng là máy chạy Web server.

22


3.2.3 Threads, Synchronization và Exceptions
 Multithread
Có lẽ ta đã quen thuộc với khái niệm multitasking: khả năng có nhiều hơn
một chương trình hoạt động dường như cùng một thời điểm. Những chương trình
multithreaded mở rộng khái niệm mutitasking ở một mức thấp hơn: một chương
trình có thể có thể chạy nhiều đoạn tính toán dường như cùng lúc (mỗi đoạn tính
toán thường được gọi là một thread). Mỗi thread coi như chạy trong một ngữ
cảnh riêng biệt: mỗi thread dường như có CPU của riêng nó, với các thanh ghi,
bộ nhớ và code cho riêng nó. Cũng cần phân biệt khác nhau quan trọng giữa
multiple processes và multiple threads: mỗi thread có tập các biến của riêng nó,
còn các thread dùng chung data trong chương trình mà chúng thuộc về. Điều này
nghe có vẻ mạo hiểm. Tuy nhiên, nó cho phép tạo ra overhead thấp hơn khi tạo
và xóa các thread so với việc sinh ra các process mới. Điều này cũng giải thích
tại sao tất cả các hệ điều hành hiện đại đều support multithreading.

Có lẽ trong Java sức mạnh lớn nhất ngoài việc hướng đối tượng là khả năng
multithreading. Điều đặc biệt là do support multithreading trong cả ngôn ngữ và
các thư viện lớp nên việc sử dụng đặc tính này dễ dàng hơn rất nhiều.
Khi dùng một ứng dụng single-thread, chỉ có thể tiến hành duy nhất một
việc trong chương trình. Chương trình chiếm dụng tất cả tài nguyên của Java runtime system (dĩ nhiên điều này không có nghĩa là chương trình của ta là chương
trình duy nhất chạy trên toàn bộ hệ thống, tuy nhiên đối với Java run-time
system, chương trình của ta là thread duy nhất chạy trên máy ảo). Việc chạy các
chương trình single-thread chỉ thích hợp cho những chương trình nhỏ, chỉ làm
một nhiệm vụ đơn, còn trong thực tế yêu cầu của bài tóan conference là không
thể: chương trình không thể đợi User nhập một câu Chat, chọn các User để gửi
câu chat đi rồi mới listen message đến từ Server (ví dụ: tín hiệu logout, câu chat
của user khác). Điều này cần được thực hiện đồng thời. Chính vì lý do đó mà
việc sử dụng multithreading để hiện thực chương trình là bắt buộc.

23


Trong Java, có hai cách để tạo một lớp hiện thực như một thread :
- Tạo một lớp là extends của lớp Thread
class className extends Thread{public void run(){
. . . //những phương thưc xú lý bên trong} }
Khi gọi phương thức start(), phương thức run() tự động được gọi :
className myClass = new className();
myClass.start();
- Tạo một lớp implements Runnable interface
class className implements Runnable{
public void run(){
. . . // những phuong thức xử lý bên trong} }
Để chạy thread loại này, cần pass một instance của lớp cho một đối tượng
Thread mới:

className myClass = new className();
new Thread(myClass).start();
Các trạng thái của một thread, cũng giống như trạng thái của một quá trình,
được mô tả bằng hình vẽ dưới đây :

Hình 3.3: Trạng thái của một Thread

24


Mỗi thread có một mức ưu tiên. Theo ngầm định, một thread thừa hưởng
mức ưu tiên của thread cha. Ta có thể tăng hoặc giảm mức ưu tiên của bất kỳ
thread nào bằng cách dùng phương thức setPriority. Mức ưu tiên có thể được đặt
trong khoảng giá trị từ MIN_PRIORITY (được định nghĩa là một trong lớp
Thread) và MAX_PRIORITY (bằng 10). NORM_PRIORITY được định nghĩa là
5.
Khi Thread-Scheduler có cơ hội nhận một thread mới, nó sẽ chọn thread có
mức ưu tiên cao nhất hiện đang ở trạng thái runnable.
Việc áp dụng threads rất hiệu quả khi thiết kế Client với đặc tính: luôn thực
hiện "đồng thời" hai nhiệm vụ: vừa listen data do Server gửi cho, vừa tương tác
với user. Ngoài ra Server cũng buộc phải hiện thực multithreading, mỗi thread
quản lý một connection với một client.
 Synchronization (xử lý crictical section)
Khả năng multithread do Java support mang lại nhiều lợi điểm. Tuy nhiên,
điều gì sẽ xảy ra nếu hai thread truy xuất và làm thay đổi cùng một đối tượng? Lý
thuyết chung của vấn đề này vẫn là: phải đảm bảo trong quá trình một thread truy
xuất và sửa đổi đối tượng dùng chung, nó không bị interrupted.
Để giải quyết vấn đề này (crictical section), môn hệ điều hành có một số
phương pháp: dùng semaphore, các giải thuật của Peterson, monitors,
TESTANDSET. Tuy nhiên, Java xử lý vấn đề này bằng synchronize access tới

các đối tượng dùng chung, đây là hình thức sử dụng monitors, tuy nhiên việc sử
dụng trong Java lại rất dễ dàng, hầu như chỉ là vấn đề khai báo.
Đơn giản là ta chỉ việc khai báo phương thức mà các thread gọi để truy
xuất đối tượng dùng chung với từ khóa: synchronized
public synchronized void changeObject(. . .
){ . . . . .
}

25


×