java中JAO,Java
String池
生產(chǎn)者、消費(fèi)者
import java.util.LinkedList;
public class Storage
{
// 倉庫最大存儲(chǔ)量
private final int MAX_SIZE = 100;
// 倉庫存儲(chǔ)的載體
private LinkedList list = new LinkedList();
// 生產(chǎn)產(chǎn)品
public void produce(String producer)
{
synchronized (list)
{
// 如果倉庫已滿
while (list.size() == MAX_SIZE)
{
System.out.println("倉庫已滿,【"+producer+"】: 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");
try
{
// 由于條件不滿足,生產(chǎn)阻塞
list.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
// 生產(chǎn)產(chǎn)品
list.add(new Object());
System.out.println("【"+producer+"】:生產(chǎn)了一個(gè)產(chǎn)品\t【現(xiàn)倉儲(chǔ)量為】:" + list.size());
list.notifyAll();
}
}
// 消費(fèi)產(chǎn)品
public void consume(String consumer)
{
synchronized (list)
{
//如果倉庫存儲(chǔ)量不足
while (list.size()==0)
{
System.out.println("倉庫已空,【"+consumer+"】: 暫時(shí)不能執(zhí)行消費(fèi)任務(wù)!");
try
{
// 由于條件不滿足,消費(fèi)阻塞
list.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
list.remove();
System.out.println("【"+consumer+"】:消費(fèi)了一個(gè)產(chǎn)品\t【現(xiàn)倉儲(chǔ)量為】:" + list.size());
list.notifyAll();
}
}
public LinkedList getList()
{
return list;
}
public void setList(LinkedList list)
{
this.list = list;
}
public int getMAX_SIZE()
{
return MAX_SIZE;
}
}
import java.util.LinkedList;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Storage {
// 倉庫最大存儲(chǔ)量
private final int MAX_SIZE = 100;
// 倉庫存儲(chǔ)的載體
private LinkedList list = new LinkedList();
// 鎖
private final Lock lock = new ReentrantLock();
// 倉庫滿的條件變量
private final Condition full = lock.newCondition();
// 倉庫空的條件變量
private final Condition empty = lock.newCondition();
// 生產(chǎn)產(chǎn)品
public void produce(String producer) {
lock.lock();
// 如果倉庫已滿
while (list.size() == MAX_SIZE) {
System.out.println("倉庫已滿,【" + producer + "】: 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");
try {
// 由于條件不滿足,生產(chǎn)阻塞
full.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 生產(chǎn)產(chǎn)品
list.add(new Object());
System.out.println("【" + producer + "】:生產(chǎn)了一個(gè)產(chǎn)品\t【現(xiàn)倉儲(chǔ)量為】:" + list.size());
empty.signalAll();
// 釋放鎖
lock.unlock();
}
// 消費(fèi)產(chǎn)品
public void consume(String consumer) {
// 獲得鎖
lock.lock();
// 如果倉庫存儲(chǔ)量不足
while (list.size() == 0) {
System.out.println("倉庫已空,【" + consumer + "】: 暫時(shí)不能執(zhí)行消費(fèi)任務(wù)!");
try {
// 由于條件不滿足,消費(fèi)阻塞
empty.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.remove();
System.out.println("【" + consumer + "】:消費(fèi)了一個(gè)產(chǎn)品\t【現(xiàn)倉儲(chǔ)量為】:" + list.size());
full.signalAll();
// 釋放鎖
lock.unlock();
}
public LinkedList getList() {
return list;
}
public void setList(LinkedList list) {
this.list = list;
}
public int getMAX_SIZE() {
return MAX_SIZE;
}
}
import java.util.concurrent.LinkedBlockingQueue;
public class Storage {
// 倉庫最大存儲(chǔ)量
private final int MAX_SIZE = 100;
// 倉庫存儲(chǔ)的載體
private LinkedBlockingQueue list = new LinkedBlockingQueue(100);
// 生產(chǎn)產(chǎn)品
public void produce(String producer) {
// 如果倉庫已滿
if (list.size() == MAX_SIZE) {
System.out.println("倉庫已滿,【" + producer + "】: 暫時(shí)不能執(zhí)行生產(chǎn)任務(wù)!");
}
// 生產(chǎn)產(chǎn)品
try {
list.put(new Object());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("【" + producer + "】:生產(chǎn)了一個(gè)產(chǎn)品\t【現(xiàn)倉儲(chǔ)量為】:" + list.size());
}
// 消費(fèi)產(chǎn)品
public void consume(String consumer) {
// 如果倉庫存儲(chǔ)量不足
if (list.size() == 0) {
System.out.println("倉庫已空,【" + consumer + "】: 暫時(shí)不能執(zhí)行消費(fèi)任務(wù)!");
}
try {
list.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("【" + consumer + "】:消費(fèi)了一個(gè)產(chǎn)品\t【現(xiàn)倉儲(chǔ)量為】:" + list.size());
}
public LinkedBlockingQueue getList() {
return list;
}
public void setList(LinkedBlockingQueue list) {
this.list = list;
}
public int getMAX_SIZE() {
return MAX_SIZE;
}
}
ClassLoader加載類順序:
運(yùn)行期間動(dòng)態(tài)加載,用到哪個(gè)加載哪個(gè)
設(shè)置run參數(shù)java -verbose:class
public class TestClassLoader {
public static void main(String[] args) {
new A();
System.out.println( " dffffffffffffaasdfasdfadsgasdgdsfgadfgjaodjf");
new B();
}
static class A {}
static class B{}
}
通過輸出結(jié)果可以看出:先加載的A,然后打印,再加載的B,不是同時(shí)加載。
static語句塊在加載后只執(zhí)行一次。
dynamic語句塊每次new對(duì)象都會(huì)執(zhí)行,相當(dāng)于構(gòu)造方法的語句。
class A {
static{
System.out.println("AAAAAAAAAAAAAAAA");
}
}
class B{
{
System.out.println("BBBBBBBBBBBBBBB");
}
}
?
總結(jié)
以上是生活随笔為你收集整理的java中JAO,Java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: seo相关文章
- 下一篇: java 读mdb,使用Java / J