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 * 定时器: 可以让我们在指定的时间做某件事,还可以重复的做某件事情 * 依赖Timer和TimerTask这两个类 * 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); }
来源:oschina
链接:https://my.oschina.net/u/2954646/blog/3224338