0%

生产者与消费者问题(Producer-consumer problem),也叫有限缓冲问题(Bounded-buffer problem),是一个经典的多线程同步问题案例。

该问题中有两个线程共享一个固定大小的缓冲区,一个线程作为生产者,负责向缓冲区中放入数据;另一个线程作为消费者,负责从缓冲区中取出数据。该问题的重点在于,要保证当缓冲区满时,生产者不能继续向其中放入数据,而当缓冲区空时,消费者也不能从缓冲区中取出数据。

那么要保证以上两点,需要在缓冲区空时休眠消费者线程,并当缓冲区有数据之后唤醒消费者线程;以及当缓冲区满时休眠生产者线程,在缓冲区有空闲空间后唤醒生产者线程,或者直接在缓冲区满时放弃未存入缓冲区的数据。

这个问题的难点在于可能会产生死锁。当陷入死锁时,生产者和消费者都会处于休眠状态,并等待对方唤醒自己。

阅读全文 »

Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。本系列将一步步地写出一个Servlet程序。

这篇博文将演示如何分别处理GETPOST请求,以及处理请求中的参数。

阅读全文 »

就像数据库连接可以使用连接池管理一样,Java中的线程也可以使用线程池来管理。本文介绍在Java中如何使用线程池,以及有哪些线程池。

阅读全文 »

要给某个webapp设定单独的context.xml,只需要在${WEBAPP_ROOT}/webapp目录下新建一个META-INF目录,并将context.xml放进去,就可以了。

context.xmlContext标签中,设定reloadable="true"即可。

1
2
3
<Context reloadable="true">
<!-- Other configurations -->
</Context>

配置完毕后重启Tomcat使配置生效,然后Tomcat在监控到项目的class或lib有变化后,就会自动重新加载这个webapp。

但是这个功能会显著增加Tomcat的性能消耗,故不建议在生产环境中使用。

本文通过一个简单的示例,介绍一下在Java中如何创建和运行多线程,以及我在学习过程中遇到的问题。包括:

  • 如何实现多线程
  • 如何在线程间共享资源
  • 共享资源时可能出现的问题
阅读全文 »