synchronized - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 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 вне форума Ответить с цитированием
Непрочитано 18.01.2013, 22:05   #2
Аватар для bloodshed
Герой

По умолчанию Re: synchronized

Вы же 2 потока запускаете
MyThread t1 = new MyThread(d);
MyThread t2 = new MyThread(d);
Code: Java
Каждый +10 даёт
__________________
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 18.01.2013, 22:24   #3
Пользователь

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

Тьфу, ведь два потока создаем.

Спасибо большое!

Простите за мат - на имоцих был. (убрал ненормативную лексику)
niko42 вне форума Ответить с цитированием
Непрочитано 18.01.2013, 23:29   #4
Олдфаг

По умолчанию Re: synchronized

если хотите увидеть разницу между static и НЕ static то поменяйте так будет видно

Код:
 
public class Main {
 
    public static void main(String[] args) throws Exception {
        Data d1=new Data();
        Data d2=new Data();

        MyThread t1=new MyThread(d1);
        MyThread t2=new MyThread(d2);
 
        Thread.sleep(3000);
        System.out.println(d1.count);
        System.out.println(d2.count);

        System.out.println(d1.countSt);
        System.out.println(d2.countSt);
    }
}
будет в консоли

10
10
20
20
Smiler вне форума Ответить с цитированием
Непрочитано 14.03.2013, 20:04   #5
Аватар для JavaDev
Пользователь

По умолчанию Re: synchronized

и вообщем давно пора Executors использовать и не создавать потоки руками
__________________
Кто же мы? Сколько небес сожгли...
JavaDev вне форума Отправить сообщение для JavaDev с помощью ICQ Отправить сообщение для JavaDev с помощью Skype™ Ответить с цитированием
Непрочитано 14.03.2013, 20:34   #6
Аватар для bloodshed
Герой

По умолчанию Re: synchronized

Цитата:
Сообщение от JavaDev Посмотреть сообщение
и вообщем давно пора Executors использовать и не создавать потоки руками
Иногда нужно именно поток создать
__________________
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с компилом Daan Raven Работа со скриптами 12 13.01.2013 21:15
Куплю исправление ошибки Bupyc Рынок / Marketplace 5 06.03.2011 00:32
TVT BAKSы Lineage II 4 16.12.2010 17:40


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 08:12. Часовой пояс GMT +3.

Вверх