3.31作业

package com.qiku.day24;
//1、 使用synchronized 、wait() 、notifyAll()方法实现 生产者消费者模型
public class Zy1 {
    private static int count = 0;
    private static final int FULL = 100;
    private static final String LOCK = "对象锁";
    class Producer implements Runnable {
        @Override
        public void run() {
            while (true) {
                synchronized (LOCK) {
                    if (count == FULL) {
                        try {
                            LOCK.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    count++;
                    System.out.println("生产者生产,库存:" + count);
                    LOCK.notifyAll();
                }
            }
        }
    }

    class Consumer implements Runnable {
        @Override
        public void run() {
            while (true) {
                synchronized (LOCK) {
                    if (count == 0) {
                        try {
                            LOCK.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    count--;
                    System.out.println("消费者消费,库存余:" + count);
                    LOCK.notifyAll();
                }
            }
        }
    }

    public static void main(String[] args) {
        Zy1 hw = new Zy1();
        Producer producer = hw.new Producer();
        Consumer consumer = hw.new Consumer();
        Thread t1 = new Thread(producer);
        Thread t2 = new Thread(consumer);
        t1.start();
        t2.start();
    }
}
package com.qiku.day24;
import java.util.concurrent.Callable;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

//2、 使用3种不同的方式创建线程
public class Zy2 {
    public class ThreadTest {
        public static void main(String[] args) {
            ExtendsCreatThread ect = new ExtendsCreatThread("继承的线程");
            Thread t1 = new Thread(ect);
            ImplementsRunnableThread irt = new ImplementsRunnableThread();
            Thread t2 = new Thread(irt);
            ImplementsCallableThread ict = new ImplementsCallableThread();
            FutureTask<String> task = new FutureTask<String>(ict);
            Thread t3 = new Thread(task);
            t1.start();
            t2.start();
            t3.start();
        }
    }

}
//1、集成Thread类
 class ExtendsCreatThread extends Thread {

    public ExtendsCreatThread(String name) {
        super(name);
    }

    public ExtendsCreatThread() {
    }

    @Override
    public void run() {
        System.out.println("继承Thread类的创建方法");
    }
}
//2、实现Runnable接口
 class ImplementsRunnableThread implements Runnable {

    @Override
    public void run() {
        System.out.println("实现Runnable接口方式创建的线程");
    }
}
//3、实现Callable<V>接口


class ImplementsCallableThread implements Callable<String> {

    @Override
    public String call() throws Exception {
        String str = "实现Callable接口创建的线程";
        System.out.println(str);
        return str;
    }
}
package com.qiku.day24;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
//3、 测试3种不同线程池,体会下区别
public class Zy3 {
    public static void main(String[] args) {
        ExecutorService service1 = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 10; i++) {
            final int index = i;
            service1.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + ":" + index);
                }
            });
        }
        service1.shutdown();
        ExecutorService service2 = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            final int index = i;
            service2.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + ":" + index);
                }
            });
        }
        service2.shutdown();
        ExecutorService service3 = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            final int index = i;
            service3.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + ":" + index);
                }
            });
        }
        service3.shutdown();
    }
}

4、 默写出线程的线程的生命周期,以及不同状态做什么事情?

Thread t = new Thread();//创建出线程    不执行
t.start();//启动线程到就绪状态,等待调配器分配时间片   不执行
分到时间片后  //从就绪状态到运行状态      执行
    时间片结束后,如果线程任务未完成则会回到就绪状态继续等待分配时间片
                如果线程任务完成,线程进入消亡状态
    
yield();//使线程状态变为 就绪状态  继续等待分配时间片   不执行
线程如果在运行状态时遇到阻塞,如( sleep(times)、join()、wait()),会等待阻塞状态结束  过程中 不执行
    阻塞状态结束后,线程则从阻塞状态 变为 就绪状态,等待分配时间片,得到时间片后会从阻塞位置继续完成任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值