线程池

江枫思渺然 提交于 2020-04-08 08:57:09
public class MyRunable implements Runnable {
    @Override
    public void run() {
        for (int x = 0; x < 100; x++) {
            System.out.println(Thread.currentThread().getName() + ":" + x);
        }
    }
}
/**
* 线程池的好处:线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中称为空闲状态,等待下一个对象来使用
* 如何实现线程的代码呢?
*   A:创建一个线程池对象,控制要创建几个线程对象
*       public static ExecutorService newFixedThreadPool(int nThreads)
*   B:这种线程池的线程可以执行:
*       可以执行Runnable对象或者Callable对象代表的线程
*       做一个类实现Runnable接口
*   C:调用如下方法即可
*       Future<?> submit(Runnable task)
*       <T> Future<T> submit(Callable<T> task)
*   D:我就要结束,可以吗? 可以
* */
public class ExecutorsDemo {
    public static void main(String[] args) {
        //创建一个线程池对象,控制要创建几个线程对象
        //public static ExecutorService newFixedThreadPool(int nThreads)
        ExecutorService pool= Executors.newFixedThreadPool(2);
        //可以执行Runnable对象或者Callable对象代表的线程
        pool.submit(new MyRunable());
        pool.submit(new MyRunable());
        //结束线程池 void shutdown()启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
        pool.shutdown();

    }
}

=================================================================

/**
* Callable:是带泛型的接口
* 这里指定的泛型其实是call()方法的返回值类型
* */
public class MyCallable implements Callable {
    @Override
    public Object call() throws Exception {
        for (int x = 0; x < 100; x++) {
            System.out.println(Thread.currentThread().getName() + ":" + x);
        }
        return null;
    }
}
/**
* 多线程的实现方式3:
*   A:创建一个线程池对象,控制要创建几个线程对象
*       public static ExecutorService newFixedThreadPool(int nThreads)
*   B:这种线程池的线程可以执行
*       可以执行Runnable对象或者Callable对象代表的线程
*       做一个类实现Runnable接口
*   C:调用如下方法即可(接口 ExecutorService)
*       Future<?> submit(Runnable task)
*       <T> Future<T> submit(Callable<T> task)
*   D:我就要结束,可以吗? 可以
* */
public class MyCallableDemo {
    public static void main(String[] args) {
        //public static ExecutorService newFixedThreadPool(int nThreads)
        ExecutorService pool = Executors.newFixedThreadPool(2);
        pool.submit(new MyCallable());
        pool.submit(new MyCallable());
        //结束线程池
        pool.shutdown();

    }
}

===============================定时器===============================

/**
 * @author
* 定时器: 可以让我们在指定的时间做某件事,还可以重复的做某件事情
* 依赖TimerTimerTask这两个类
* Timer:定时
*   public Timer()创建一个新的计时器
*   public void schedule(TimerTask task,long delay)
*   public void schedule(TimerTask task,long delay,long period)
*   public void cancel()
*   TimerTask任务
* */

    public static void main(String[] args) {
        //创建定时器对象
        Timer t = new Timer();
        //t.schedule(new MyTask(),3000);
        //3秒后执行爆炸任务
        t.schedule(new MyTask(t), 3000);
    }

//做一个任务
   class MyTask extends TimerTask {
    private Timer t;

    public MyTask() {

    }

    public MyTask(Timer t) {
        this.t = t;
    }

    @Override
    public void run() {
        System.out.println("beng,爆炸了");
        //  t.cancel();
    }
}
public static void main(String[] args) {
        //创建定时器对象
        Timer timer=new Timer();
        //3秒后执行爆炸任务第一次,如果不成功,每隔两秒再执行
        timer.schedule(new MyTask2(),3000,2000);
    }

class  MyTask2 extends TimerTask{

    @Override
    public void run() {
        System.out.println("beng 爆炸了");
    }
}
class DeleteFloder extends TimerTask{
    @Override
    public void run() {
        File srcFolder=new File("demo");
        deleteFolder(srcFolder);
    }

    /**删除递归目录*/
    private void deleteFolder(File srcFolder) {
        File[] fileArray=srcFolder.listFiles();
            if (fileArray!=null){
                for (File file:fileArray){
                    if (file.isDirectory()){
                        deleteFolder(file);
                    }else {
                        System.out.println(file.getName()+":"+file.delete());
                    }
                }
                System.out.println(srcFolder.getName()+":"+srcFolder.delete());
            }
    }
}
public static void main(String[] args) throws ParseException {
    Timer timer=new Timer();
    String s="2020-08-01 11:15:00";
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d=sdf.parse(s);

    timer.schedule(new DeleteFloder(),d);

}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!