多線程與高並發編程(九,離開小廠進大廠的第一周

程序小茉莉 2021-09-20 04:33:48 阅读数:395

第一周 第一 一周
}
public void onData(ByteBuffer buffer) {
long sequence = ringBuffer.next();
try {
LongEvent event = ringBuffer.get(sequence);
event.setValue(buffer.getLong(0));
} finally {
ringBuffer.publish(sequence);
}
}

??上為聲明准備類,下為主方法:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

public static void main(String[] args) {

//Executor executor = Executors.newCachedThreadPool();
LongEventFactory factory = new LongEventFactory();
//must be power of 2
int ringBufferSize = 1024;
Disruptor<LongEvent> disruptor = new Disruptor<LongEvent>(factory, ringBufferSize, Executors.defaultThreadFactory());
disruptor.handleEventsWith(new LongEventHandler());
disruptor.start();
RingBuffer<LongEvent> ringBuffer = disruptor.getRingBuffer();
LongEventProducer producer = new LongEventProducer(ringBuffer);
ByteBuffer bb = ByteBuffer.allocate(8);
for(long l = 0; l<100; l++) {
bb.putLong(0, l);
producer.onData(bb);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
disruptor.shutdown();

}


### [](
)4\. 生產者線程模式:
??ProducerType生產者線程模式一共有2種:
??ProducerType有兩種模式 Producer.MULTI和Producer.SINGLE
??默認是MULTI,錶示在多線程模式下產生sequence
??如果確認是單線程生產者,那麼可以指定SINGLE,效率會提昇
??如果是多個生產者(多線程),但模式指定為SINGLE,會出什麼問題呢?
![多線程與高並發編程(九,離開小廠進大廠的第一周_程序員](https://s6.51cto.com/images/20210920/1632082875812800.jpg)
### [](
)5\. 等待策略
??①,(常用)BlockingWaitStrategy:通過線程阻塞的方式,等待生產者喚醒,被喚醒後,再循環檢查依賴的sequence是否已經消費
??② BusySpinWaitStrategy:線程一直自旋等待,可能比較耗cpu
??③ LiteBlockingWaitStrategy:線程阻塞等待生產者喚醒,與BlockingWaitStrategy相比,區別在signalNeeded.getAndSet,如果兩個線程同時訪問一個訪問waitfor,一個訪問signalAll時,可以减少lock加鎖次數
??④ LiteTimeoutBlockingWaitStrategy:與LiteBlockingWaitStrategy相比,設置了阻塞時間,超過時間後拋异常
??⑤ PhasedBackoffWaitStrategy:根據時間參數和傳入的等待策略來决定使用哪種等待策略
??⑥ TimeoutBlockingWaitStrategy:相對於BlockingWaitStrategy來說,設置了等待時間,超過後拋异常
??⑦ (常用)YieldingWaitStrategy:嘗試100次,然後Thread.yield()讓出cpu
??⑧ (常用)SleepingWaitStrategy : sleep
### [](
)6\. 多個消費者模式

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.

LongEventHandler h1 = new LongEventHandler();

LongEventHandler h2 = new LongEventHandler();
disruptor.handleEventsWith(h1, h2...)//傳入多個消費者(多線程)

### [](
)7\. 出异常情况處理

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

EventHandler h1 = (event, sequence, end) -> {

 sout(event);
throw new Exception("消費者出异常");
}
disruptor.handleEventsWith(h1);
disruptor.handleExceptionsFor(h1).with(new ExcetionHandler<LongEvent>() {
@Override
public void handleEventExceition(Throwable throwable, long l, longEvent longEvent) {
throwable.printStackTrace();
}
@Override
public void handleOnStartExceition(Throwable throwable) {
sout("Exception Start to Hanled!");
}
@Override
public void handleOnShutDownExceition(Throwable throwable) {
sout("Exception shutDown to Hanled!");
}
})

??調用.handleExceptionsFor(h1).with()並重寫以上三個方法,方法內處理。
## 總結
一般像這樣的大企業都有好幾輪面試,所以自己一定要花點時間去收集整理一下公司的背景,公司的企業文化,俗話說「知己知彼百戰不殆」,不要盲目的去面試,還有很多人關心怎麼去跟HR談薪資。
這邊給大家一個建議,如果你的理想薪資是30K,你完全可以跟HR談33~35K,而不是一下子就把自己的底牌暴露了出來,不過肯定不能說的這麼直接,比如原來你的公司是25K,你可以跟HR講原來的薪資是多少,你們這邊能給到我的是多少?你說我這邊希望可以有一個20%漲薪。
最後再說幾句關於招聘平臺的,總之,簡曆投遞給公司之前,請確認下這家公司到底咋樣,先去百度了解下,別被坑了,每個平臺都有一些居心不良的廣告黨等著你上鉤,千萬別上當!!!
Java架構學習資料,學習技術內容包含有:Spring,Dubbo,MyBatis, RPC, 源碼分析,高並發、高性能、分布式,性能優化,微服務 高級架構開發等等。
**[CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】](https://ali1024.coding.net/public/P7/Java/git)**
還有Java核心知識點+全套架構師學習資料和視頻+一線大廠面試寶典+面試簡曆模板可以領取+阿裏美團網易騰訊小米愛奇藝快手嗶哩嗶哩面試題+Spring源碼合集+Java架構實戰電子書。
![多線程與高並發編程(九,離開小廠進大廠的第一周_程序員_02](https://s3.51cto.com/images/20210920/1632082875908781.jpg)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
版权声明:本文为[程序小茉莉]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210920043347480c.html