Chúng ta hãy tìm hiểu mối tương quan giữa Java và FSP để có thể chuyển từ mã nguồn Java thành FSP.
Bảng 4.3.2a Những toán tử tương đương giữa FSP và Java Java FSP ++ (cộng 1) .inc -- (trừ 1) .dec = (bằng) = | (hoặc) | ! (not) ! == (so sánh bằng) == > (lớn hơn) > < (nhỏ hơn) < & (và) &
Tuy nhiên trên FSP chỉ thực hiện được trên các phép toán với số nguyên.
Bảng 4.3.2b: Các thành phần cơ bản khi chuyển từ Java sang FSP:
++a a.inc
--a a.dec
a = true a.write[true]
a = false a.write[false]
if(a == 0) … a.read[v:Int] -> if v = 0 then … if(a > 0) … a.read[v:Bool] -> if v > 0 then …
while (!a) … WHILE = (a.read[v:Bool] -> if(!v) then…
Bây giờ, chúng ta sẽ lấy một ví dụ để nghiên cứu cách chuyển từ Java sang FSP: Đây là một hàm trong mã nguồn Java của bài toán “SingleLandBridge” được lấy từ trang web[3] chính thức của cuốn sách Concurrency: State models and Java programes second edition[1]:
--nred; if (nred==0) notifyAll(); }
Phương pháp chuyển mã nguồn Java sang FSP là chuyển lần lượt từng câu, chữ trong mã Java thành FSP. Tên hàm Java sẽ được gán nhãn trạng thái bắt đầu trong FSP.
- Các phương thức trong Java sẽ là các trạng thái được gán nhãn tương ứng với tên phương thức trong Java.
- Vòng lặp trong Java cũng là các trạng thái được gán nhãn tương ứng với tên vòng lặp trong Java.
- Các biến trong Java thành các hành động trong FSP. Đây là FSP đặc tả mã nguồn Java trên:
const N = 3 range Int = 0..N
set VarAlpha = {read[Int],dec}
REDEXIT = (acquire -> redExit
-> nred.dec // nred--
-> nred.read[v:Int] // if (nred==0) notifyAll()
),
CONTINUE
= (release -> REDEXIT).