亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? outputstreamhandler.java

?? JAVA做的短信平臺(tái)
?? JAVA
字號(hào):
package com.ll.smsbeans;

import java.io.IOException;
import java.io.OutputStream;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ll.smsbeans.log.LogCommon;

/**
 *	建立一個(gè)輸出線程。為發(fā)送的數(shù)據(jù)建立一個(gè)支持線程的隊(duì)列,使數(shù)據(jù)包的發(fā)送可以支持多線程。
 *
 * @author  listlike <a href="mailto:listlike@hotmail.com">
 *                      <i>&lt;listlike@hotmail.com&gt;</i></a>
 */

public final class OutputStreamHandler extends Thread
{
	/** 輸出流 */
	private OutputStream out;

	/** 父連接,用于在包發(fā)送成功后發(fā)出成功事件 */
	private ConnectionBean.OutputStreamInterface osi;

	/** 發(fā)送包隊(duì)列 */
	private final LockingQueue output = new LockingQueue();

	/** 是否立即終止線程的運(yùn)行 */
	private boolean keepRunning = true;

	static Logger _log;
	/**
	 *建立一個(gè)新的 <code>OutputStreamHandler</code> 實(shí)例。
	 *
	 * @param out  <code>OutputStream</code> 輸出流
	 */
	public OutputStreamHandler(ConnectionBean.OutputStreamInterface osi)
	{
		this.osi = osi;
	}

	/**
	*設(shè)置輸出流。
	*
	* @param out  <code>OutputStream</code> 輸出流
	*/
	public void setOutputStream(OutputStream out)
	{
		this.out = out;
	}

	/**
	 * 把需要發(fā)送包加入發(fā)送隊(duì)列。
	 *
	 * @param p Packet 發(fā)送包。
	 */
	public final void send(Packet p)
	{
		if (keepRunning)
			output.put(p);
		else
			osi.sendFailed(p);
	}

	/**
	 * <code>shutdown</code> 通知線程結(jié)束運(yùn)行。
	 */
	public void shutdown()
	{
		_log.fine("OutputStream: shutdown");
		keepRunning = false;
		output.putLast(null);

		_log.fine("OutputStream: closing queue");
	}

	/**
	 * 線程終止處理方法。
	 * @param ex <code>Exception</code> 造成中止的異常。
	 * @param p <code>Packet</code> 當(dāng)前發(fā)送的包。
	 */

	public void handleThreadDeath(Exception ex, Packet p)
	{
		_log.warning("OutputStream: thread death");
		if (p != null)
			osi.sendFailed(p);
		Object pkt = output.getLast();
		while (pkt != null)
		{
			osi.sendFailed((Packet) pkt);
			pkt = output.getLast();
		}
		osi.unexpectedThreadDeath(ex);
	}

	/**
	 * 線程終止處理方法。
	 * @param ex <code>Exception</code> 造成中止的異常。
	 */
	public void handleThreadDeath(Exception ex)
	{
		handleThreadDeath(ex, null);
	}

	/**
	 * 線程循環(huán)發(fā)送發(fā)送隊(duì)列中的數(shù)據(jù)包。
	 */
	public final void run()
	{
		if (out == null)
			throw new RuntimeException("starting output thread without any IO set up to use");
		Packet p = null;
		while (keepRunning)
		{
			try
			{
				p = (Packet) output.get();

			} catch (final InterruptedException e)
			{
				_log.severe("OutputStream: interrupted");
			}

			if (p != null)
			{
				try
				{
					byte[] data = p.getContent();
					int len = data.length + 4;
					byte[] mybytes = new byte[4];

					mybytes[3] = (byte) (0xff & len);
					mybytes[2] = (byte) ((0xff00 & len) >> 8);
					mybytes[1] = (byte) ((0xff0000 & len) >> 16);
					mybytes[0] = (byte) ((0xff000000 & len) >> 24);

					out.write(mybytes);
					out.write(data);
					out.flush();
					if (_log.isLoggable(LogCommon.DEBUG_LEVEL))
						_log.log(
							LogCommon.DEBUG_LEVEL,
							LogCommon.getLogBin("Sent Data", mybytes, data));
				} catch (IOException e)
				{

					//錯(cuò)誤處理
					handleThreadDeath(e, p);
					return;
				}
				//發(fā)送成功消息
				osi.sent(p);
			}
		}

		_log.warning("OutputStream: stopped");
	}

	/**
	*線程安全的發(fā)送隊(duì)列,這個(gè)隊(duì)列沒(méi)有大小沒(méi)有限制。 
	*
	* @author  listlike <a href="mailto:listlike@hotmail.com">
	*                      <i>&lt;listlike@hotmail.com&gt;</i></a>
	*
	*/
	private final class LockingQueue
	{
		private LinkedList m_queue = new LinkedList();
		private boolean m_closed = false;
		private boolean m_reject = false;
		private int m_waiting = 0;

		/**
		* 加入對(duì)象
		* @param item <code>Object</code> 加入隊(duì)列的對(duì)象。
		*/
		public synchronized final void put(Object item)
		{
			if (m_closed || m_reject)
				return;
			m_queue.addLast(item);
			notify(); //#notify
		}

		/**
		* 加入最后一個(gè)發(fā)送對(duì)象,加入后對(duì)列自動(dòng)關(guān)閉,不能再加入對(duì)象。
		* 
		* @param item <code>Object</code> 加入隊(duì)列的對(duì)象。
		*/

		public synchronized final void putLast(Object item)
		{
			put(item);
			m_reject = true;
		}

		/**
		 * 獲取對(duì)象
		 *  
		 * @param timeout 超時(shí)設(shè)置。
		 * @return  <code>Object</code> 獲取的對(duì)象
		 * @throws InterruptedException 
		 */
		public synchronized final Object get(long timeout)
			throws InterruptedException
		{
			long _expire = System.currentTimeMillis() + timeout;
			if (m_closed)
				return null;
			try
			{
				if (m_queue.size() <= 0)
				{
					++m_waiting;
					while (m_queue.size() <= 0)
					{
						wait(timeout);

						if (timeout > 0
							&& System.currentTimeMillis() > _expire)
						{
							--m_waiting;
							throw new InterruptedException("LockingQueue : timeout to dequeue");
						}

						if (m_closed)
						{
							--m_waiting;
							return null;
						}
					}
					--m_waiting;
				}

				Object head = m_queue.removeFirst();

				if (m_queue.size() == 0 && m_reject)
					close(); // 移出最后一個(gè)對(duì)象,關(guān)閉隊(duì)列。

				return head;
			} catch (NoSuchElementException e) // 會(huì)發(fā)生嗎?
			{
				throw new Error("LockingQueue: internal error");
			}
		}
		/**
		 * 獲得最后對(duì)象
		 * @return 最后對(duì)象
		 */
		public final Object getLast()
		{
			if (m_queue.size() <= 0)
				return null;
			else
				return m_queue.removeFirst();
		}

		/**
		 * 獲取對(duì)象
		 *  
		 * @return  <code>Object</code> 獲取的對(duì)象
		 * @throws InterruptedException 
		 */
		public synchronized final Object get() throws InterruptedException
		{
			return get(0);
		}
		/**
		 * 隊(duì)列是否為空
		 * @return 隊(duì)列是否為空
		 */
		public final boolean isEmpty()
		{
			return m_queue.size() <= 0;
		}

		/**
		* 等待的線程數(shù)。
		* @return 隊(duì)列的大小
		*/
		public final int size()
		{
			return m_waiting;
		}

		/**
		 * 關(guān)閉隊(duì)列
		 */
		public synchronized void close()
		{
			m_closed = true;
			m_queue = null;
			notifyAll();
		}
	}
	/* (非 Javadoc)
	 * @see java.lang.Thread#start()
	 */
	public synchronized void start()
	{
		// TODO 自動(dòng)生成方法存根
		keepRunning = true;
		super.start();
	}

	static {
		_log = Logger.getLogger("com.ll.smsbeans.OutputStreamHandler");
	}

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区中文字幕电影 | 欧美亚洲国产bt| 国产精品色噜噜| 粉嫩绯色av一区二区在线观看| 久久久久久久久久久久电影| 精品一二三四区| 欧美激情一区二区三区不卡| 99久久99久久免费精品蜜臀| 亚洲永久精品大片| 日韩视频在线观看一区二区| 美女在线视频一区| 国产精品每日更新在线播放网址| 99精品视频一区| 日韩精品乱码免费| 久久久91精品国产一区二区精品 | 一区二区在线电影| 4438成人网| 国产精品77777竹菊影视小说| 一色屋精品亚洲香蕉网站| 在线中文字幕一区二区| 久久精品久久久精品美女| 国产精品视频观看| 欧美剧在线免费观看网站 | 日日夜夜精品免费视频| 2023国产精品| 欧美性大战久久久| 国产美女娇喘av呻吟久久| 亚洲激情五月婷婷| 精品第一国产综合精品aⅴ| 91原创在线视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲国产激情av| 91精品国产综合久久精品| www.爱久久.com| 久久国产精品露脸对白| 亚洲免费资源在线播放| 精品国产乱码久久久久久夜甘婷婷| av成人动漫在线观看| 美国十次综合导航| 亚洲尤物视频在线| 国产精品九色蝌蚪自拍| 日韩一区二区免费电影| 色94色欧美sute亚洲线路二| 国产乱人伦偷精品视频免下载| 亚洲电影第三页| 自拍偷拍亚洲欧美日韩| 国产日韩欧美电影| 日韩无一区二区| 欧美日韩国产一级二级| 91在线精品秘密一区二区| 极品美女销魂一区二区三区 | 亚洲最大的成人av| 中国色在线观看另类| 欧美电影免费观看高清完整版| 日本高清无吗v一区| 国产精品一区二区在线播放| 美女一区二区三区| 日韩黄色免费电影| 午夜影视日本亚洲欧洲精品| 亚洲同性gay激情无套| 日本一区二区高清| 国产亚洲制服色| 精品99一区二区| 欧美一区二区三区小说| 欧美裸体一区二区三区| 欧美在线免费视屏| 色播五月激情综合网| 色婷婷一区二区三区四区| 成人一区二区三区视频| 成人午夜大片免费观看| 岛国一区二区在线观看| 国产成人精品免费视频网站| 国产精品亚洲人在线观看| 精品一区二区三区免费毛片爱 | 亚洲一区二区三区影院| 一区二区三区视频在线观看| 亚洲精品日日夜夜| 亚洲一区二区成人在线观看| 一区二区三区四区av| 香蕉乱码成人久久天堂爱免费| 亚洲国产日韩a在线播放性色| 亚洲一区二区综合| 日韩中文字幕麻豆| 久久国产夜色精品鲁鲁99| 国产在线国偷精品免费看| 国产乱码精品一品二品| 成人午夜视频免费看| 99久久婷婷国产综合精品电影| 色综合天天性综合| 欧美日韩亚州综合| 日韩三级高清在线| 国产欧美中文在线| 综合婷婷亚洲小说| 午夜电影久久久| 狠狠v欧美v日韩v亚洲ⅴ| 国产成人自拍高清视频在线免费播放| 国产一二精品视频| 91亚洲国产成人精品一区二区三| 色综合久久久久综合| 欧美男女性生活在线直播观看| 日韩一二三区视频| 中文字幕免费观看一区| 亚洲精品国产高清久久伦理二区| 午夜精品久久久久久久99樱桃| 美女一区二区三区在线观看| 国产91丝袜在线播放0| 91麻豆6部合集magnet| 4438x成人网最大色成网站| 久久久99免费| 亚洲国产成人av好男人在线观看| 老司机午夜精品| 99re亚洲国产精品| 欧美一区二区三区四区高清| 亚洲国产精品ⅴa在线观看| 亚洲妇女屁股眼交7| 国产精品99久久久久久久vr| 91久久精品一区二区二区| 精品欧美久久久| 亚洲精品日韩综合观看成人91| 久久99精品久久只有精品| av中文字幕亚洲| 欧美一级二级在线观看| 国产精品美女久久久久久久久| 午夜欧美电影在线观看| 成人免费高清在线观看| 欧美精品免费视频| 一区在线中文字幕| 久久精品噜噜噜成人88aⅴ| 欧美性受极品xxxx喷水| 欧美韩日一区二区三区| 日本一道高清亚洲日美韩| 成人精品国产一区二区4080| 日韩情涩欧美日韩视频| 亚洲激情第一区| 成人在线一区二区三区| 日韩视频免费直播| 亚洲一二三级电影| a在线播放不卡| 国产三级精品视频| 九色综合狠狠综合久久| 欧美色图激情小说| 亚洲欧美日本在线| 成人性视频免费网站| 亚洲精品在线一区二区| 日韩中文字幕不卡| 欧美性猛交xxxx黑人交| 亚洲男人的天堂一区二区| 国产99久久久久| 久久精品一二三| 精品一区在线看| 日韩三级中文字幕| 久久成人精品无人区| 91精品国产一区二区三区香蕉| 亚洲国产成人av网| 欧美日本一区二区| 亚洲国产成人91porn| 欧美影院一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 欧美色图一区二区三区| 亚洲精品五月天| 色综合一个色综合亚洲| 亚洲视频网在线直播| av爱爱亚洲一区| 亚洲老司机在线| 91国内精品野花午夜精品| 亚洲欧美日韩综合aⅴ视频| 91美女片黄在线观看91美女| 亚洲欧美综合在线精品| 91视频免费看| 一区二区三区在线视频播放| 在线欧美日韩精品| 亚洲电影一区二区| 欧美一区二区三区播放老司机| 天天操天天干天天综合网| 欧美一区二区黄| 精品一区二区三区在线视频| 久久新电视剧免费观看| 国产91精品欧美| 亚洲丝袜制服诱惑| 欧美性猛片aaaaaaa做受| 日韩不卡一区二区三区| 久久亚洲精品小早川怜子| 国产成人aaa| 亚洲日本在线a| 欧美挠脚心视频网站| 美女一区二区视频| 国产蜜臀av在线一区二区三区| 99在线热播精品免费| 亚洲第一精品在线| 精品乱人伦一区二区三区| 成人精品国产一区二区4080| 亚洲精品国产无套在线观| 欧美一区二区在线免费播放| 国产一区欧美二区| 亚洲色图色小说| 日韩一区二区免费视频| 成人性生交大合| 午夜久久久久久| 国产日韩欧美一区二区三区乱码| 91麻豆国产自产在线观看|