(一个程序,QQ.exe Music.exe 程序的集合)
(开了一个进程 Typora,写字,自动保存(线程负责的))
Thread
类
1、Java
语言的JVM
允许程序运行多个线程,他通过java.lang.Thread
类来实现
2、每个线程都是通过某个特定Thread
对象的run()
方法来完成操作的,经常把run()
方法的主体称为线程体
3、通过该Thread
对象的start()方法来调用这个线程
4、构造器
线程创建的方式
public class ThreadDemo { public static void main(String[] args) { new ThreadB().start(); new ThreadB().start(); new ThreadB().start(); } } class ThreadB extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + "------------------"); } }
public class ThreadDemo { public static void main(String[] args) throws , { new Thread(new ThreadA()).start(); new Thread(new ThreadA()).start(); new Thread(new ThreadA()).start(); } } class ThreadA implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + "------------------"); } }
public class ThreadDemo { public static void main(String[] args) throws { FutureTask<Integer> f1 = new FutureTask<>(new ThreadC()); FutureTask<Integer> f2 = new FutureTask<>(new ThreadC()); FutureTask<Integer> f3 = new FutureTask<>(new ThreadC()); new Thread(f1, "A").start(); //System.out.println(f1.get()); new Thread(f2, "B").start(); //System.out.println(f2.get()); new Thread(f3, "C").start(); //System.out.println(f3.get()); } } class ThreadC implements Callable { @Override public Object call() throws Exception { System.out.println(Thread.currentThread().getName() + "------------------"); return Thread.currentThread().getName() ; } }
public class Demo01 { public static void main(String[] args) { // 自定义线程池!工作 ThreadPoolExecutor // 最大线程到底该如何定义 // 1、CPU 密集型,几核,就是几,可以保持CPu的效率最高! // 2、IO 密集型 > 判断你程序中十分耗IO的线程, // 程序 15个大型任务 io十分占用资源! // 获取CPU的核数 System.out.println(Runtime.getRuntime().availableProcessors()); List list = new ArrayList(); ExecutorService threadPool = new ThreadPoolExecutor( 2, Runtime.getRuntime().availableProcessors(), 3, TimeUnit.SECONDS, new LinkedBlockingDeque<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy()); //队列满了,尝试去和最早的竞争,也不会抛出异常! try { // 最大承载:Deque + max // 超过 RejectedExecutionException for (int i = 1; i <= 9; i++) { // 使用了线程池之后,使用线程池来创建线程 threadPool.execute(()->{ System.out.println(Thread.currentThread().getName()+" ok"); }); } } catch (Exception e) { e.printStackTrace(); } finally { // 线程池用完,程序结束,关闭线程池 threadPool.shutdown(); } } }
这就是标题——JUC