פונקציות מסונכרנות ב java

niro a

New member
פונקציות מסונכרנות ב java

אם אני בונה פונקציה מסונכרנת בתוך class שהוא נמצא בתוך הclass החיצוני של התוכנית ולclass החיצוני יש עוד מספר פונקציות מסונכרנות. האם כל הפונקציות המסונכרנות עובדות בתיאום למרות שהם בclass שונה? תודה רבה לכולם.
 

Zack DA

New member
לא, זה פר אובייקט.

ואם תתן דוגמא למה בדיוק אתה מתכוון אוכל להסביר לך יותר טוב.
 
../images/Emo45.gif

ואני גם הייתי רוצה לשמוע הסבר
 

Zack DA

New member
../images/Emo41.gif עקב מגבלת הזמן אנסה לתמצת:

בג'אווה יש מנגנון סינכרוניזציה. המנגנון הזה תמיד מסתמך על אובייקט ספציפי - כלומר האובייקט יכול לשמש כמסנכרן - אפשר לחכות עליו עד שהוא משתחרר וכדומה. בתוך בלוק מסונכרן יכול לשהות רק תהליך אחד שתפס את הסמפור הרלוונטי. בקוד זה נראה ככה:
public class MyClass { public MyClass (Object mutex) { mMutex = mutex; } public doSomething1 () { synchronize(mMutex) { // this code is synchronized using mMutex } } public doSomething2 () { // this code is synchronized using THIS } /** The mutex received via construction */ protected Object mMutex = null; }​
צריך תמיד לזכור שקוד מסונכרן הוא יקר ואיטי, ותמיד צריך לנסות להשתמש בחלופות של wake-ups במקום לסנכרן אובייקטים.
 

Zack DA

New member
המשך תשובה לשואל המקורי:

אם אתה רוצה שכמה אינסטנסים של אותו הקלאס יהיו מסונכרנים ביחד - תסנכרן בעזרת member סטטי. אם מדובר בקלאסים שונים - תעביר אובייקט מסנכרן ב- constructor, בדומה לקוד שהראתי.
 

niro a

New member
שאלה נוספת

אם אני באותו class פנימי משתמש בפונקציה מסונכרנת של הclass החיצוני אז זה מאלץ את ה class הפנימי גם לעבוד בסינכרון? (עבור אותה פונקציה)
 

Zack DA

New member
כמובן,

אם הפנימי מריץ קוד מסונכרן - אז בהחלט. לא רק הפנימי, כל מי שמריץ את המתודה המסונכרת. בכל מקרה, המנע ככל האפשר מקלאסים פנימיים.
 
למעלה