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