JAVA并发编程之多线程

news/2024/12/19 8:09:57/

线程的理解:

  • 每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行,这些运执行单元可以看作程序执行的一 条路径,被称为线程。
  • 线程是CPU调度和执行的单位。
  • 操作系统中的每一个进程中都至少存在一个线程。
  • 当一个Java程序启动时就会产生一个进程, 该进程会默认创建一个线程, 在这个线程上会运行main ()方法中的代码。

线程创建:

1. Thread

Thread thread = new Thread(()->{
for (int i = 0; i < 100; i++) {System.out.print(" T" + i);
}
});
thread.start();

线程休眠使用sleep()方法

线程等待使用join()方法

线程中断设置标志位,当然Thread类内部包含了一个boolean的变量可以用来作为标记位,标记是否被中断Thread.interrupted()或者Thread.currentThread().isInterrupted()都可以

2. Runnable

class MyThread implements Runnable{public void run(){while (true){System.out.println("MyThread类的run方法");}}
}
public class Demo01 {public static void main(String[] args) {//创建一个实现了Runnable接口的对象MyThread myThread = new MyThread();//将该对象传给Thread类的构造函数Thread thread = new Thread(myThread);//thread对象调用start方法,在这里不会调用自身的run方法,它会调用myThread对象的run方法thread.start();while (true){System.out.println("Demo类的main方法");}}
}

创建一个线程是声明实现类Runnable接口。那个类然后重写run类的方法。然后可以分配类的实例,在创建的时候作为参数传递,并启动。

可以分为三步:

定义MyRunnable类实现Runnable接口
实现run()方法,编写线程执行体

创建线程对象,调用start()方法启动线程

3. 实现 Callable 接口

public class ThreadDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask futureTask = new FutureTask<>(new MyCallable());Thread t1 = new Thread(futureTask);t1.start();//如果 futureTask.get() 没得到结果,代码将一直等着System.out.println(futureTask.get());System.out.println("t1 线程执行完成");}static class MyCallable implements Callable {@Overridepublic Object call() {System.out.println("实现 Callable 接口创建线程");return "Callable 返回结果";}}
}

创建一个 MyCallable 内部类实现 Callable 接口,重写 call() 方法。

FutureTask 实现了 RunnableFuture,RunnableFuture 继承了 Runnable, Future。

意味着可通过 FutureTask 接收 Callable 中 call 方法的返回值。

并和 Runnable 一样,传入 Thread 中创建线程。

futureTask.get() 方法可以得到线程返回结果,但是该方法是阻塞的。

意味着如果 t1 线程一直在运算,main 线程需要一直等待 t1 的结束,拿到结果才能继续运行。

4. 使用线程池创建

public class ThreadDemo {public static void main(String[] args){//创建固定 5 个线程的线程池ExecutorService executorService = Executors.newFixedThreadPool(5);//用线程池执行 100 次任务for (int i = 0; i < 100; i++) {executorService.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}});}}
}

降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度。 当任务到达时,任务可以不需要等到线程创建就能立即执行。
提高线程的可管理性。 如果无限制的创建线程,不仅会消耗系统资源,还会降低系统的稳定性,通过线程池可以进行统一的分配,调优和监控。

Java线程池类型有四种,分别为:newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduleThreadPool。

1、newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理所需,可灵活回收空闲线程,若线程数不够,则新建线程。

2、newFixedThreadPool:创建一个固定大小的线程池。可控制并发的线程数量,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

3、newSingleThreadExecutor:创建一个单线程的线程池,即只创建唯一的工作者线程来执行任务,,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

4、newScheduleThreadPool:创建一个定长的线程池,支持定时及周期性任务执行。  


http://www.ppmy.cn/news/119115.html

相关文章

攒机零件价格二手微型计算机,二手DIY攒机:这种SSD闭着眼买

解释为什么CPU特别不容易坏的文章有很多。大家也都知道了CPU几乎是电脑中最不容易坏的硬件之一。因此&#xff0c;许多朋友在组装电脑时会选择跑到某鱼平台入手一块二手CPU。通常情况下确实不会出问题&#xff0c;而且可以省下一笔资金用于其他配件的升级。 但&#xff0c;主板…

如何选购计算机硬件,DIY攒机经验之谈:十年老司机教你组装电脑如何选购硬件...

如今&#xff0c;玩游戏的玩家绝大数都是选择组装机&#xff0c;组装机主要优势就是价格便宜&#xff0c;硬件能够按需搭配&#xff0c;不像品牌机&#xff0c;配置方面搭配均衡性很差&#xff0c;往往显卡都是比较低端的&#xff0c;因此在游戏体验会十分不理想。下面装机之家…

图像处理计算机基本配置,图形图像工作的电脑配置推荐_DIY攒机硬件郎中-中关村在线...

对于从事图像设计的朋友来说&#xff0c;对电脑的要求与普通人就有些不一样了。如果是照片、3D动画、CAD设计、3DS渲染等工作&#xff0c;对内存、硬盘读写速度、CPU的处理速度会有所要求&#xff0c;但是压力并不大&#xff0c;主流电脑即可胜任&#xff0c;但是如果要使用电脑…

我是学计算机的,我也攒机了

原文在这里 http://yandong.org/?p=269 好吧,今天攒了个电脑,人生完整了,我是学计算的,就是干这个的

计算机配件声卡,DIY组装电脑到底需要哪些配件 攒机网卡声卡之类的要买吗

对于台式电脑&#xff0c;现在大部分人都会选择自己去攒一台&#xff0c;那么下面就来告诉大家&#xff0c;自己DIY一台电脑出来到底有哪些配件是需要的。 组装电脑需要哪些配件?硬件清单如下&#xff1a; 1、CPU (又称处理器&#xff0c;目前只要两家品牌&#xff1a;Intel平…

攒机计划

键盘&#xff1a;罗技波影手 鼠标&#xff1a;罗技LX3 Plus cpu散热器&#xff1a;超频三红海标准版HP-928 &#xff0c;酷冷至尊冰玲珑&#xff08;静音版&#xff09;&#xff0c;九州风神贝塔400 plus 路由器&#xff1a;腾达W311R&#xff0c; 腾达W548D &#xff0c…

DIY攒机

京东823做活动&#xff0c;在京东上攒了一系列电脑配件。 经过几天心碎的日子&#xff0c;终于点亮了屏幕&#xff0c;把系统装了上去。 感觉真得不该跟风入手B150M-D3H这款游戏主板。 usb3接口可以插usb2U盘&#xff0c;usb2接口也可以插usb3U盘&#xff0c;可是这款主板太…

i7台式电脑配置推荐_i7组装电脑配置清单【攒机之家】

独 热 Intel 酷睿i7 7700K CPU (盒) LGA 1151 四核 八线程 功耗91WCPU主频:4.2GHz (1*2110) 技嘉 Z270N-WIFI 主板 (迷你小板,无线网卡,蓝牙,M.2,2*HDMIDVI接口)CPU插槽:LGA 1151 (1*1057) 海盗船 16GB DDR4 2400 复仇者内存 (单条)CMK16GX4M1A2400C16 容量描述:116GB (1*1390)…