Тема: synchronized
Показать сообщение отдельно
Непрочитано 18.01.2013, 20:40   #1
Пользователь

Автор темы (Топик Стартер) synchronized

Здравствуйте.

PHP код:
class Data
{
    
int count =0;
    static 
int countSt =0;
}
 
class 
MyThread implements Runnable {
 
    
Data obj;
 
    
MyThread(Data d){
        
obj d;
        new 
Thread(this).start();
    }
     
void Add()
     {
         
synchronized(Thread.class){
            try {
                
Thread.sleep(10);
                
int n=obj.count;
                
n++;
                
Thread.sleep(10);
                
obj.count=n;
            } catch (
InterruptedException ex) {       }
         }
    }
    
synchronized static void AddStatic() {
                try {
            
Thread.sleep(10);
            
int n=Data.countSt;
            
n++;
            
Thread.sleep(10);
            
Data.countSt=n;
        } catch (
InterruptedException ex) {       }
    }
    public 
void run() {
        for(
int i=0i<10i++) Add();
        for(
int i=0i<10i++) AddStatic();
    }
}
 
public class 
Main {
 
    public static 
void main(String[] argsthrows Exception {
        
Data d=new Data();
        
MyThread t1=new MyThread(d);
        
MyThread t2=new MyThread(d);
 
        
Thread.sleep(3000);
        
System.out.println(d.count);
        
System.out.println(Data.countSt);    }
 

Выводит:
20
20

Вопрос: почему 20 20 ? А не 10?
20 раз обращаемся к переменной чтоль?
niko42 вне форума Ответить с цитированием