Java test---aabbcc

7:
public static void main(String[] args) throws InterruptedException {
Account acc = new Account();
acc.setBalance(1000);

     int corePoolSize = 15;
     int maximumPoolSize = 20;
     long keepAliveTime = 2;
    
    ThreadPoolExecutor excutor = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,TimeUnit.SECONDS,new SynchronousQueue<Runnable>());
    excutor.prestartAllCoreThreads();
    Lock lock = new ReentrantLock();
    for (int i = 0; i < 10; i++) {
        excutor.execute(new Runnable() {

            @Override
            public void run() {
                lock.lock();
                try {
                    if (acc.getBalance() >= 800) {
                        acc.setBalance(acc.getBalance()-800);
                        System.out.println("扣除800");
                        acc.setBalance(acc.getBalance()+800);
                        System.out.println("存入800");
                    }else{
                        System.out.println("警告:余额不足800");
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }finally {
                    lock.unlock();
                }
                
            }
            
        });
    }
    Thread.sleep(1000);
    System.out.println("最终余额:"+ acc.getBalance());
    excutor.shutdown();
}

8:
test:
public class Test83 {

public static void main(String[] args) {
    ExecutorService exec = Executors.newCachedThreadPool();
    final Semaphore semaphore = new Semaphore(50);
    for (int i = 0; i < 100; i++) {
        DBConnect dbThread = new DBConnect(semaphore);
        try {
            System.out.println(i+" 进入等待连接");
            semaphore.acquire();
            exec.execute(dbThread);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    // 退出线程池
    exec.shutdown();

DB connect:
import java.util.Random;
import java.util.concurrent.Semaphore;

public class DBConnect extends Thread {
private Semaphore semaphore;

public DBConnect(Semaphore s) {
    this.semaphore = s;
}

@Override
public void run() {
    Random r=new java.util.Random();
    int s = r.nextInt(5000)%(1001) +2000;
    try {
        System.out.println("Get DB Connection.");
        Thread.sleep(s);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }finally{
        semaphore.release();

// System.out.println(semaphore.availablePermits());//查询剩余资源
}
}

}

9:
public class Test {
public static void main(String[] args) throws IOException, InterruptedException {
CouponNumber cn = new CouponNumber();
cn.setNumber(100);

    int corePoolSize = 200;
    int maximumPoolSize = 500;
    long keepAliveTime = 5;
    ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS,
            new SynchronousQueue<Runnable>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
    executor.prestartAllCoreThreads();
    Lock lock = new ReentrantLock();
    for(int i=0;i<300;i++) {
        executor.execute(new Runnable() {
            @Override
            public void run() {
                lock.lock();
                try {
                    if (cn.getNumber() > 0) {
                        cn.setNumber(cn.getNumber()-1);
                        System.out.println("扣除1张");
                    }else{
                        System.out.println("警告:余额不足不能扣除");
                    }
                    System.out.println("当前余额"+cn.getNumber());
                } catch (Exception e) {
                    e.printStackTrace();
                }finally {
                    lock.unlock();
                }
            }
        });
    }
    Thread.sleep(1000);
    System.out.println("=======最终余额:"+cn.getNumber());

    executor.shutdown();
}

}
Coupon num:
//import java.util.concurrent.locks.Lock;
//import java.util.concurrent.locks.ReentrantLock;
public class CouponNumber {
private int number;

public int getNumber() {
    return number;
}

public void setNumber(int number) {
    this.number = number;
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 废话不多说,自己进入今天的主题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:...
    传奇内服号阅读 7,028评论 1 31
  • 1.1. 说一说自己对于 synchronized 关键字的了解 synchronized关键字解决的是多个线程之...
    雷小雷555阅读 1,352评论 0 0
  • Java多线程之死锁 死锁发生在并发情况中,当两个(或者多个)线程(进程)相互持有对方所需要的资源,又不主动释放,...
    JAVA技术进阶之路阅读 4,298评论 0 0
  • 1. 并发:进程与线程 关于并发,一个最直观的例子就是你可以同时听歌还能上网,能用Word。即使在同一个程序中,也...
    零点145阅读 3,244评论 0 0
  • selenium 是一个 web 的自动化测试工具 Selenium WebDriver在启动火狐,作为自动化测试...
    无知小虾阅读 3,462评论 0 0