Top Banner
40

Java весна 2013 лекция 3

Jul 13, 2015

Download

Technology

Technopark
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Java весна 2013 лекция 3
Page 2: Java весна 2013 лекция 3
Page 3: Java весна 2013 лекция 3
Page 4: Java весна 2013 лекция 3
Page 5: Java весна 2013 лекция 3
Page 6: Java весна 2013 лекция 3
Page 7: Java весна 2013 лекция 3
Page 8: Java весна 2013 лекция 3
Page 9: Java весна 2013 лекция 3
Page 10: Java весна 2013 лекция 3
Page 11: Java весна 2013 лекция 3
Page 12: Java весна 2013 лекция 3
Page 13: Java весна 2013 лекция 3
Page 14: Java весна 2013 лекция 3
Page 15: Java весна 2013 лекция 3
Page 16: Java весна 2013 лекция 3
Page 17: Java весна 2013 лекция 3
Page 18: Java весна 2013 лекция 3

public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);

}

public final int incrementAndGet() {while (true) {

int current = get(); //get() возвращает текущее значение (volatile)int next = current + 1;if (compareAndSet(current, next))

return next;}

}

Page 19: Java весна 2013 лекция 3

Page 20: Java весна 2013 лекция 3
Page 21: Java весна 2013 лекция 3

Page 22: Java весна 2013 лекция 3
Page 23: Java весна 2013 лекция 3
Page 24: Java весна 2013 лекция 3
Page 25: Java весна 2013 лекция 3

Page 26: Java весна 2013 лекция 3
Page 27: Java весна 2013 лекция 3

public class Address {static private AtomicInteger abonentIdCreator = new AtomicInteger();final private int abonentId;

public Address(){this.abonentId = abonentIdCreator.incrementAndGet();

}

public int hashCode() {return abonentId;

}}

public interface Abonent {Address getAddress();

}

Page 28: Java весна 2013 лекция 3

public abstract class Msg {final private Address from;final private Address to;

public Msg(Address from, Address to){this.from = from;this.to = to;

}

protected Address getFrom(){return from;

}

protected Address getTo(){return to;

}

public abstract void exec(Abonent abonent);}

Page 29: Java весна 2013 лекция 3

public abstract class MsgToFrontend extends Msg {

public MsgToFrontend(Address from, Address to) {super(from, to);

}

public void exec(Abonent abonent) {if( abonent instanceof Frontend ){

exec((Frontend)abonent);}

}

public abstract void exec(Frontend frontend);}

Page 30: Java весна 2013 лекция 3

public class MsgUpdateUserId extends MsgToFrontend {

final private int sessionId;final private int userId;

public GameInfoMsg(Address from, Address to, int sessionId, int userId) {super(from, to);this. sessionId = sessionId;this. userId = userId;

}

public void exec(Frontend frontend) {frontend.updateUserId(sessionId, userId);

}}

Page 31: Java весна 2013 лекция 3

Msg

MsgToAS MsgToFrontend

MsgUpdateUserIdMsgGetUserId

- Address from- Address to

- String name

- Integer sessionId

- Integer sessionId

- Integer userId

Page 32: Java весна 2013 лекция 3

private Map<Address, ConcurrentLinkedQueue<Msg>> messages = new HashMap<Address, ConcurrentLinkedQueue<Msg>>();

public void sendMessage(Msg message){Queue<Msg> messageQueue = messages.get(message.getTo());messageQueue.add(message);

}

public void execForAbonent(Abonent abonent) {Queue<Msg> messageQueue = messages.get(abonent.getAddress());while(!messageQueue.isEmpty()){

Msg message = messageQueue.poll();message.exec(abonent);

}}

Page 33: Java весна 2013 лекция 3
Page 34: Java весна 2013 лекция 3
Page 35: Java весна 2013 лекция 3

public class AddressService {private Map<Class<?>, Address> addresses = new HashMap<Class<?>, Address>();

public Address getAddress(Class<?> abonentClass) {return addresses.get(abonentClass);

}

public void setAddress(Abonent abonent) {addresses.put(abonent.getClass(), abonent.getAddress());

}}

Page 36: Java весна 2013 лекция 3
Page 37: Java весна 2013 лекция 3

public void run() {while (true) {

messageSystem.execForAbonent(this);Thread.sleep(TICK_TIME);

}}

Page 38: Java весна 2013 лекция 3

14. Плюсы и минусы многопоточных приложений

15. Способы взаимодействия потоков

16. java.util.concurrent

17. MessageSystem. Address и Abonent

Page 39: Java весна 2013 лекция 3
Page 40: Java весна 2013 лекция 3