首页 > 编程语言 > 详细

并发与多线程

时间:2019-07-04 22:50:13      阅读:117      评论:0      收藏:0      [点我收藏+]

并发

  并发(concurrency)是指CPU在某个时间段内交替处理多任务的能力。每个CPU不可能只顾着执行某个进程,而让其他进程一直等待被执行。所以,CPU把可执行时间均分成若干份,每个进程执行一份或多份时间后,记录当前的工作状态,释放相关资源并进入等待状态,让其他进程抢占CPU等资源。

  在并发环境下,由于程序的封闭性被打破,出现了以下特点:

  1.并发程序之间有相互制约的关系。直接制约体现在一个程序需要另一个程序的计算结果;间接制约体现在多个进程竞争共享资源。

  2.并发程序的执行过程是断断续续的。程序需要保留现场,记忆现场指令及执行点。

  3.当并发数设置合理并且CPU拥有足够的处理能力时,并发会提高程序的运行效率。

  在Java编程中,并发主要与线程有关。

线程

  线程是CPU调度和分派的基本单位,为了更充分地利用CPU资源,一般都会使用多线程进行处理。多线程的作用是提高任务的平均执行速度,但是会导致程序可解性变差,编程难度加大。所以,合适的线程数才能让CPU资源被充分利用。

  每一个线程都有自己的操作栈、程序计数器、局部变量表等资源。同一进程内的所有线程都可以共享该进程的所有资源。

  Java提供了两种形式定义线程类:

  1.实现Runnable接口并重写其中的run()方法。

技术分享图片
 1 class Comsumer implements Runnable {
 2 
 3     private Store store;
 4 
 5     public Comsumer(Store store) {
 6         this.store = store;
 7     }
 8 
 9     @Override
10     public void run() {
11         for (int i = 1; i < 10; i++) {
12             store.getValue();
13         }
14     }
15 
16 }
Comsumer

  2.继承Thread类并重写其中的run()方法。

技术分享图片
 1 class Producer extends Thread {
 2 
 3     private Store store;
 4 
 5     public Producer(Store store) {
 6         this.store = store;
 7     }
 8 
 9     @Override
10     public void run() {
11         for (int i = 1; i < 10; i++) {
12             store.setValue(i);
13         }
14     }
15 
16 }
Producer

  线程状态的启动需要调用Thread的start()方法:

  1.如果是继承Thread类的线程类,则该线程的对象可以直接调用start()方法启动线程。

  2.如果是实现Runnable接口的线程类,则该线程的对象需要先包装为一个Thread对象才能调用start()方法启动线程。

技术分享图片
1 @Test
2 void test() {
3     Store store = new Store();
4     Producer producer = new Producer(store);   // Producer线程类继承Thread类
5     producer.start();
6     Comsumer comsumer = new Comsumer(store);   // Comsumer线程类实现Runnable接口
7     new Thread(comsumer).start();
8 }
test

线程状态

  

并发与多线程

原文:https://www.cnblogs.com/lqkStudy/p/11135153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!