??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品成人午夜在线观看,亚洲av永久无码精品网站,亚洲日本VA午夜在线影院http://www.tkk7.com/crazy--liyang/javazh-cnThu, 17 Jul 2025 04:07:37 GMTThu, 17 Jul 2025 04:07:37 GMT60ibatis分页<一>http://www.tkk7.com/crazy--liyang/archive/2011/09/14/358644.htmlcrazy-李阳crazy-李阳Wed, 14 Sep 2011 11:11:00 GMThttp://www.tkk7.com/crazy--liyang/archive/2011/09/14/358644.htmlhttp://www.tkk7.com/crazy--liyang/comments/358644.htmlhttp://www.tkk7.com/crazy--liyang/archive/2011/09/14/358644.html#Feedback0http://www.tkk7.com/crazy--liyang/comments/commentRss/358644.htmlhttp://www.tkk7.com/crazy--liyang/services/trackbacks/358644.html
package com.lxy.dialect;
public abstract interface Dialect {
public boolean supportLimit();
public String getLimitString(String sql,boolean hasoffset);
public String getLimitString(String sql,int offset,int limit);
}


package com.lxy.dialect;
public class MyDialect implements Dialect {
protected static final String SQL_END_DELIMITER = ";";
public String getLimitString(String sql, boolean hasoffset) {
return new StringBuffer(sql.length() + 20).append(trim(sql)).append(
hasoffset ? "limit ?,?" : "limit ?").append(SQL_END_DELIMITER)
.toString();
}
public String getLimitString(String sql, int offset, int limit) {
sql = trim(sql);
StringBuffer sb = new StringBuffer(sql.length() + 20);
sb.append(sql);
if (offset > 0) {
sb.append("limit").append(offset).append(',').append(limit).append(
";");
} else {
sb.append("limit").append(limit).append(";");
}
return sb.toString();
}
public boolean supportLimit() {
return true;
}
private String trim(String sql) {
sql = sql.trim();
if (sql.endsWith(";")) {
sql = sql.substring(0, sql.length() - 1 - ";".length());
}
return sql;
}
}


crazy-李阳 2011-09-14 19:11 发表评论
]]>
U程池代?/title><link>http://www.tkk7.com/crazy--liyang/archive/2011/09/02/357826.html</link><dc:creator>crazy-李阳</dc:creator><author>crazy-李阳</author><pubDate>Fri, 02 Sep 2011 07:20:00 GMT</pubDate><guid>http://www.tkk7.com/crazy--liyang/archive/2011/09/02/357826.html</guid><wfw:comment>http://www.tkk7.com/crazy--liyang/comments/357826.html</wfw:comment><comments>http://www.tkk7.com/crazy--liyang/archive/2011/09/02/357826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/crazy--liyang/comments/commentRss/357826.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazy--liyang/services/trackbacks/357826.html</trackback:ping><description><![CDATA[<div><strong><span style="font-size: 14pt; color: red;">ThreadPoolManager</span><span style="font-size: 14pt;"><br /><br /></span></strong></div><div><strong>package com.threadpool.test;<br />import java.util.LinkedList;<br />import java.util.Queue;<br />import java.util.concurrent.ArrayBlockingQueue;<br />import java.util.concurrent.Executors;<br />import java.util.concurrent.RejectedExecutionException;<br />import java.util.concurrent.RejectedExecutionHandler;<br />import java.util.concurrent.ScheduledExecutorService;<br />import java.util.concurrent.ScheduledFuture;<br />import java.util.concurrent.ThreadPoolExecutor;<br />import java.util.concurrent.TimeUnit;<br /><br />import org.omg.CORBA.TIMEOUT;<br /><br />import com.nio.test.ReadFileThread;<br /><br />public class ThreadPoolManager {<br /><br />    private static ThreadPoolManager tpm = new ThreadPoolManager();<br /><br />    // U程池最线E数<br />    private final static int MIN_SIZE = 4;<br />    // U程池最大线E数<br />    private final static int MAX_SIZE = 10;<br />    // U程池维护线E允许的I闲限制<br />    private final static int KEEP_ACTIVE_TIME = 0;<br />    // U程池用的缓冲队列大?br />    private final static int WORK_QUEUE_SIZE = 10;<br />    // 消息~冲队列<br />    Queue queue = new LinkedList();<br />    <br />    final Runnable accessBuffeThread = new Runnable()<br />    {<br /><br />        public void run() {<br />            <br />            if( hasMoreAcquire() ){<br />                <br />                String msg = ( String ) queue.poll();<br />                Runnable task = new AccessDBThread( msg );<br />                threadpool.execute( task );<br />            }<br />        }<br />        <br />    };<br />    // 无法?ThreadPoolExecutor 执行的Q务的处理E序<br />    final RejectedExecutionHandler handler = new RejectedExecutionHandler()<br />    {<br /><br />        public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {<br />            // TODO Auto-generated method stub<br />            System.out.println(((AccessDBThread )r).getMsg()+"消息攑օ队列中重新等待执?);<br />            queue.offer((( AccessDBThread ) r ).getMsg() );<br />        }<br />        <br />    };<br />    <br />    final ThreadPoolExecutor threadpool = new ThreadPoolExecutor(MIN_SIZE, MAX_SIZE, KEEP_ACTIVE_TIME, TimeUnit.SECONDS, new ArrayBlockingQueue(WORK_QUEUE_SIZE),this.handler);<br />    <br />    // 调度U程?br /><br />    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool( 1 );<br /><br />    final ScheduledFuture taskHandler = scheduler.scheduleAtFixedRate(accessBuffeThread, 0, 1, TimeUnit.SECONDS);<br />    <br />    public static ThreadPoolManager newinstance()<br />    {<br />        return tpm;<br />    }<br />    <br />    private ThreadPoolManager (){}<br />    <br />    <br />    private boolean hasMoreAcquire()<br />    {<br />        return !queue.isEmpty();<br />    }<br />    <br />    public void addLogMsg(String msg)<br />    {<br />     Runnable task = new AccessDBThread(msg);<br />     threadpool.execute(task);<br />    }<br />}<br /></strong><div><strong><span style="font-size: 18pt; color: red;">AccessDBThread</span></strong></div><strong><div>package com.threadpool.test;<br /><br />public class AccessDBThread implements Runnable{<br /><br />    private String msg;<br />    public String getMsg() {<br />        return msg;<br />    }<br />    public void setMsg(String msg) {<br />        this.msg = msg;<br />    }<br />    <br />    public AccessDBThread(){<br />        super();<br />    }<br />    <br />    public AccessDBThread(String msg)<br />    {<br />        this.msg=msg;<br />    }<br />    public void run() {<br />        // TODO Auto-generated method stub<br />        System.out.println("Added the message: "+msg+" into the Database");<br />    }<br /><br />    <br />}<br /><br /><span style="color: red; font-size: 24pt;">试c:(x)</span><br /><div>package com.threadpool.test;<br /><br /><br />public class TestDriver {<br /><br />    ThreadPoolManager tpm = ThreadPoolManager.newinstance();<br />    <br />    public void addMsg(String msg)<br />    {<br />        tpm.addLogMsg(msg);<br />    }<br />    public static void main(String[] args) {<br />        for(int i=0;i<100;i++)<br />        {<br />            new TestDriver().addMsg(Integer.toString(i));<br />        }<br />    }<br />}<br /></div><br /></div><br /></strong></div><strong><br /></strong><img src ="http://www.tkk7.com/crazy--liyang/aggbug/357826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazy--liyang/" target="_blank">crazy-李阳</a> 2011-09-02 15:20 <a href="http://www.tkk7.com/crazy--liyang/archive/2011/09/02/357826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>U程?/title><link>http://www.tkk7.com/crazy--liyang/archive/2011/09/01/357725.html</link><dc:creator>crazy-李阳</dc:creator><author>crazy-李阳</author><pubDate>Thu, 01 Sep 2011 06:01:00 GMT</pubDate><guid>http://www.tkk7.com/crazy--liyang/archive/2011/09/01/357725.html</guid><wfw:comment>http://www.tkk7.com/crazy--liyang/comments/357725.html</wfw:comment><comments>http://www.tkk7.com/crazy--liyang/archive/2011/09/01/357725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/crazy--liyang/comments/commentRss/357725.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazy--liyang/services/trackbacks/357725.html</trackback:ping><description><![CDATA[<div><p><strong><a name="1">Z么要用线E池Q?/a></strong></p> <p> 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用E序都面向处理来自某些远E来源的大量短小的Q务。请求以某种方式到达服务器,q种?式可能是通过|络协议Q例?HTTP、FTP ?POPQ、通过 JMS 队列或者可能通过轮询数据库。不请求如何到达,服务器应用程序中l常出现的情冉|Q单个Q务处理的旉很短而请求的数目却是巨大的?/p> <p> 构徏服务器应用程序的一个过于简单的模型应该是:(x)每当一个请求到辑ְ创徏一个新U程Q然后在新线E中求服务。实际上Q对于原型开发这U方法工作得?好,但如果试N|以q种方式q行的服务器应用E序Q那么这U方法的严重不很明显。每个请求对应一个线E(thread-per-requestQ方 法的不之一是:(x)为每个请求创Z个新U程的开销很大Qؓ(f)每个h创徏新线E的服务器在创徏和销毁线E上p的时间和消耗的pȝ资源要比花在处理实际的用 戯求的旉和资源更多?/p> <p> 除了(jin)创徏和销毁线E的开销之外Q活动的U程也消耗系l资源。在一?JVM 里创建太多的U程可能?x)导致系l由于过度消耗内存而用完内存或“切换q度”。ؓ(f)?jin)防止资源不I服务器应用程序需要一些办法来限制Ml定时刻处理的请求数目?/p> <p> U程池ؓ(f)U程生命周期开销问题和资源不问题提供了(jin)解决Ҏ(gu)。通过对多个Q务重用线E,U程创徏的开销被分摊到?jin)多个Q务上。其好处是,因ؓ(f)在请求到达时 U程已经存在Q所以无意中也消除了(jin)U程创徏所带来的gq。这P可以立即ؓ(f)h服务Q应用E序响应更快。而且Q通过适当地调整线E池中的U程数目Q也 是当请求的数目过某个阈值时Q就强制其它M新到的请求一直等待,直到获得一个线E来处理为止Q从而可以防止资源不?/p><p> </p><div><p><strong><a name="4">使用U程池的风险</a></strong></p> <p> 虽然U程池是构徏多线E应用程序的强大机制Q但使用它ƈ不是没有风险的。用U程池构建的应用E序Ҏ(gu)遭受M其它多线E应用程序容易遭受的所有ƈ发风险,诸如同步错误和死锁,它还Ҏ(gu)遭受特定于线E池的少数其它风险,诸如与池有关的死锁、资源不_U程泄漏?/p> <p><a name="N100CB">死锁</a></p> <p> M多线E应用程序都有死锁风险。当一l进E或U程中的每一个都在等待一个只有该l中另一个进E才能引L(fng)事gӞ我们pq组q程或线E? <em>死锁</em>?jin)。死锁的最单情形是Q线E?A 持有对象 X 的独占锁Qƈ且在{待对象 Y 的锁Q而线E?B 持有对象 Y 的独占锁Q却在等待对?X 的锁。除非有某种Ҏ(gu)来打破对锁的{待QJava 锁定不支持这U方法)(j)Q否则死锁的U程永q等下去? </p> <p> 虽然M多线E程序中都有死锁的风险,但线E池却引入了(jin)另一U死锁可能,在那U情况下Q所有池U程都在执行已阻塞的{待队列中另一d的执行结果的dQ?但这一d却因为没有未被占用的U程而不能运行。当U程池被用来实现涉及(qing)许多交互对象的模拟,被模拟的对象可以怺发送查询,q些查询接下来作为排队的?务执行,查询对象又同步等待着响应Ӟ?x)发生这U情c(din)?/p> <p><a name="N100DA">资源不</a></p> <p> U程池的一个优点在于:(x)相对于其它替代调度机Ӟ有些我们已经讨论q)(j)而言Q它们通常执行得很好。但只有恰当地调整了(jin)U程池大时才是q样的。线E消耗包括内存和其它pȝ资源在内的大量资源。除? <code>Thread</code> 对象所需的内存(sh)外,每个U程都需要两个可能很大的执行调用堆栈。除此以外,JVM 可能?x)?f)每个 Java U程创徏一个本机线E,q些本机U程消耗额外的pȝ资源。最后,虽然U程之间切换的调度开销很小Q但如果有很多线E,环境切换也可能严重地影响E序的性能? </p> <p> 如果U程池太大,那么被那些线E消耗的资源可能严重地媄(jing)响系l性能。在U程之间q行切换会(x)费旉Q而且使用出比?zhn)实际需要的U程可能?x)引赯源匮?问题Q因为池U程正在消耗一些资源,而这些资源可能会(x)被其它Q务更有效地利用。除?jin)线E自w所使用的资源以外,服务h时所做的工作可能需要其它资源,??JDBC q接、套接字或文件。这些也都是有限资源Q有太多的ƈ发请求也可能引v失效Q例如不能分?JDBC q接?/p> <p><a name="N100EA">q发错误</a></p> <p> U程池和其它排队机制依靠使用 <code>wait()</code> ? <code>notify()</code> Ҏ(gu)Q这两个Ҏ(gu)都难于用。如果编码不正确Q那么可能丢失通知Q导致线E保持空闲状态,管队列中有工作要处理。用这些方法时Q必L外小?j);即便是专家也可能在它们上面出错。而最好用现有的、已l知道能工作的实玎ͼ例如在下面的 <a >无须~写(zhn)自q?/a>中讨论的 <code>util.concurrent</code> 包? </p> <p><a name="N10103">U程泄漏</a></p> <p> 各种cd的线E池中一个严重的风险是线E泄漏,当从池中除去一个线E以执行一Q务,而在d完成后该U程却没有返回池Ӟ?x)发生这U情c(din)发生线E泄漏的一U情形出现在d抛出一? <code>RuntimeException</code> 或一? <code>Error</code> 时。如果池cL有捕捉到它们Q那么线E只?x)退?gu)线E池的大将?x)永久减一个。当q种情况发生的次数够多ӞU程池最l就为空Q而且pȝ停止,因ؓ(f)没有可用的线E来处理d? </p> <p> 有些d可能?x)永q等待某些资源或来自用户的输入,而这些资源又不能保证变得可用Q用户可能也已经回家?jin),诸如此类的Q务会(x)怹停止Q而这些停止的d??x)引起和U程泄漏同样的问题。如果某个线E被q样一个Q务永久地消耗着Q那么它实际上就被从池除M(jin)。对于这L(fng)dQ应该要么只l予它们自己的线E,?么只让它们等待有限的旉?/p> <p><a name="N10117">hq蝲</a></p> <p> 仅仅是请求就压垮?jin)服务器Q这U情冉|可能的。在q种情Ş下,我们可能不想每个到来的h都排队到我们的工作队列,因ؓ(f)排在队列中等待执行的d可能?消耗太多的pȝ资源q引赯源缺乏。在q种情Ş下决定如何做取决于?zhn)自己Q在某些情况下,(zhn)可以简单地抛弃hQ依靠更高别的协议E后重试hQ?zhn)也?以用一个指出服务器暂时很忙的响应来拒绝h?/p><p><br /></p></div><div><p><strong><a name="5">有效使用U程池的准则</a></strong></p> <p> 只要(zhn)遵循几条简单的准则Q线E池可以成ؓ(f)构徏服务器应用程序的极其有效的方法:(x)</p> <ul><li>不要寚w些同步等待其它Q务结果的d排队。这可能?x)导致上面所描述的UŞ式的死锁Q在那种死锁中,所有线E都被一些Q务所占用Q这些Q务依ơ等待排队Q务的l果Q而这些Q务又无法执行Q因为所有的U程都很忙?</li><li>在ؓ(f)旉可能很长的操作用合用的U程时要心(j)。如果程序必ȝ待诸?I/O 完成q样的某个资源,那么h定最长的{待旉Q以?qing)随后是失效q是Q务重新排队以便稍后执行。这样做保证?jin)?x)通过某个线E释攄某个可能成功完成的Q务,从而将最l取? <em>某些</em>q展? <br /> </li><li>理解d。要有效地调整线E池大小Q?zhn)需要理解正在排队的d以及(qing)它们正在做什么。它们是 CPU 限制的(CPU-boundQ吗Q它们是 I/O 限制的(I/O-boundQ吗Q?zhn)的答案将影响?zhn)如何调整应用程序。如果?zhn)有不同的dc,q些cL着截然不同的特征,那么Z同Q务类讄多个工作?列可能会(x)有意义,q样可以相应地调整每个池?/li></ul></div><br /><p> </p></div><img src ="http://www.tkk7.com/crazy--liyang/aggbug/357725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazy--liyang/" target="_blank">crazy-李阳</a> 2011-09-01 14:01 <a href="http://www.tkk7.com/crazy--liyang/archive/2011/09/01/357725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://9196528.com" target="_blank">Ů18ëƬˮѹۿ</a>| <a href="http://btintemet.com" target="_blank">ձһ߲Ͷ߲Ա</a>| <a href="http://88bgbg.com" target="_blank">ƷѵĻվ</a>| <a href="http://51ruilon.com" target="_blank">ҹAëƬƵ</a>| <a href="http://17soco.com" target="_blank">ҹ븣Ƶ</a>| <a href="http://h47h.com" target="_blank">պ༤ѧ</a>| <a href="http://www321fafa.com" target="_blank">޾ƷƵ</a>| <a href="http://ahsuibao.com" target="_blank">Ʒһ</a>| <a href="http://3fsf.com" target="_blank">޾ƷƵ </a>| <a href="http://863409.com" target="_blank">޹Ʒһһҳ</a>| <a href="http://czdlglass.com" target="_blank">뾫ƷӰ</a>| <a href="http://51cga.com" target="_blank">һŮ18ëƬ</a>| <a href="http://6atb.com" target="_blank">Ƶ߹ۿ </a>| <a href="http://shelaoban.com" target="_blank">aëƬa԰Ħ</a>| <a href="http://szhszszy.com" target="_blank">һƵվ</a>| <a href="http://988938.com" target="_blank">13һ14ëƬ</a>| <a href="http://rj150.com" target="_blank">ձһ</a>| <a href="http://www33399.com" target="_blank">˾ƷѴȫ</a>| <a href="http://wjjccw.com" target="_blank">վѹۿ</a>| <a href="http://www-63228.com" target="_blank">޾Ʒ״</a>| <a href="http://wwwy6x22.com" target="_blank">˾þô߽</a>| <a href="http://zgj688.com" target="_blank">޾Ʒ鶹ר</a>| <a href="http://xmllhb.com" target="_blank">޹Ʒ˾þ</a>| <a href="http://222mp3.com" target="_blank">av˻վ߹ۿ</a>| <a href="http://www-188588.com" target="_blank">ӰԺ߹ۿ</a>| <a href="http://xiaoduanfa.com" target="_blank">av벻˽ӰԺ</a>| <a href="http://x3013.com" target="_blank">ĻӰԺ</a>| <a href="http://jpvv8.com" target="_blank">Ļѹۿ</a>| <a href="http://fns92.com" target="_blank">M ŷSSSS222</a>| <a href="http://www-715111.com" target="_blank">ƬѹۿĻ</a>| <a href="http://sxhnyl.com" target="_blank">18ڵվ</a>| <a href="http://96j6.com" target="_blank">ŷÿѵӰ߹ۿ</a>| <a href="http://020iws.com" target="_blank">ѾƷԲ߹ۿͼƬ </a>| <a href="http://www789789.com" target="_blank">˳ƵƵ</a>| <a href="http://aaa99999.com" target="_blank">ƵѹۿƵ</a>| <a href="http://zp0533.com" target="_blank">ϸëƬ</a>| <a href="http://thegaybdsm.com" target="_blank">ձһѸ </a>| <a href="http://222941.com" target="_blank">ѹƷƵ</a>| <a href="http://ymiwang.com" target="_blank">޳avƬ߹ۿ </a>| <a href="http://xin-matai.com" target="_blank">Ƶ</a>| <a href="http://2030188.com" target="_blank">ssswwwձվƬ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>