多线程总结一:基本概念

1、线程和进程
a、并发性(concurrency):在同一时刻只能有一条指令执行,当多个进程指令被快速轮换执行,在宏观上具有多个进程同时执行的效果。
b、并行性(parallel):在同一时刻,有多条指令在多个处理器上同时执行。
c、操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。
d、操作系统支持多进程并发采用的策略有:共享式多任务操作策略(Windows3.1、Mac OS9)、抢占式多任务操作策略(Windows NT、Windows 2000以及UNIX/Linux等)。

2、多线程的优势
a、进程之间不能共享内存,但线程之间共享内存容易;
b、系统创建进程时需要为该进程重新分配系统资源,但创建线程代价小得多,因此使用多线程来实现多任务并发比多进程效率高;
c、Java语言内置了多线程功能支持,而不是单纯的作为底层操作系统的调度方式,从而简化了Java的多线程编程;

3、多线程的应用场景

一个浏览器必须能同时下载多个图片、一个Web服务器必须能同时响应多个用户请求、Java虚拟机本身就在后台提供一个超级线程来进行垃圾回收、图形
用户界面(GUI)应用也需要启动单独的线程从主机环境收集用户界面事件……

4、线程的创建和启动
a、继承Thread类创建线程类

 1 /**
 2  * @Title: FirstThread.java
 3  * @Package
 4  * @author 任伟
 5  * @date 2014-12-5 下午3:05:49
 6  * @version V1.0
 7  */
 8
 9 /**
10  * @ClassName: FirstThread
11  * @Description: 通过继承Thread创建线程类
12  * @author 任伟
13  * @date 2014-12-5 下午3:05:49
14  */
15 public class FirstThread extends Thread {
16     private int i;
17
18     public void run() {
19         for (; i < 100; i++) {
20             // this获取当前线程
21             // getName()获取当前线程名称
22             System.out.println(this.getName() + " " + i);
23         }
24     }
25
26     public static void main(String[] args) {
27         for (int i = 0; i < 100; i++) {
28             System.out.println(Thread.currentThread().getName() + " " + i);
29             if(20==i){
30                 Thread t1 = new FirstThread();
31                 t1.setName("线程1");
32                 Thread t2 = new FirstThread();
33                 t2.setName("线程2");
34
35                 t1.start();
36                 t2.start();
37             }
38         }
39     }
40 }

FirstThread

b、使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。

c、实现Runnable接口创建线程类

 1 /**
 2  * @Title: SecondThread.java
 3  * @Package
 4  * @author 任伟
 5  * @date 2014-12-5 下午6:53:07
 6  * @version V1.0
 7  */
 8
 9 /**
10  * @ClassName: SecondThread
11  * @Description:
12  * @author 任伟
13  * @date 2014-12-5 下午6:53:07
14  */
15 public class SecondThread implements Runnable {
16     private int i;
17
18     /*
19      * (non-Javadoc)
20      *
21      * @see java.lang.Runnable#run()
22      */
23     @Override
24     public void run() {
25         for(;i<100;i++){
26             System.out.println(Thread.currentThread().getName()+" "+i);
27         }
28
29     }
30
31     public static void main(String[] args) {
32         for (int i = 0; i < 100; i++) {
33             System.out.println(Thread.currentThread().getName()+" "+i);
34             if(20==i){
35                 SecondThread st = new SecondThread();
36                 new Thread(st, "线程1").start();
37                 new Thread(st, "线程2").start();
38             }
39         }
40     }
41
42 }

SecondThread

d、Runnable对象仅仅作为Thread对象的target,Runnable实现类里包含的run()方法仅作为线程的执行体。而实际的线程对象依旧是Thread实例,只是该Thread线程负责执行其target的run()方法。

e、采用实现Runnable接口的方式创建多线程,线程类还可以继承其他类;多个线程可以共享一个target对象,便于多个线程处理同一份资源的情况;
f、采用继承Thread类的方式创建多线程,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

时间: 2024-12-22 01:25:20

多线程总结一:基本概念的相关文章

[Android学习笔记]Android中多线程开发的一些概念

线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关工作就叫做线程同步. android中,处理线程同步的手段就是:锁 一般分为公平锁和非公平锁: synchronized(内部锁,互斥锁):synchronized是JVM提供的线程同步机制,如果出现问题,JVM能捕获异常,并释放资源,具体实现机制需要查看JVM源码 synchronized的使用特

多线程和进程的概念

1.耗时的操作使用线程,提高应用程序响应 2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求. 3.多CPU系统中,使用线程提高CPU利用率 4.改善程序结构.一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改. 使用多线程的理由之一是和进程相比,它是一种非常花销小,切换快,更"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段.堆栈段和数据段,这是

python多线程中锁的概念

python的锁可以独立提取出来 mutex = threading.Lock() #锁的使用 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([timeout]) #释放 mutex.release() 概念 好几个人问我给资源加锁是怎么回事,其实并不是给资源加锁, 而是用锁去锁定资源,你可以定义多个锁, 像下面的代码, 当你需要独占某一资源时,任何一个锁都可以锁这个资源 就好比你用不同的锁都可以把相同的一个门锁住是一个道理 import thr

多线程实践——概述与概念

 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程. 一个简单示例如下: using System; using System.Threading; class ThreadDemo { static void Main() { Thread t = new Thread (WriteY); t.Start(); while (true)

IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispatch_queue_t,队列名称在调试时辅助,无论什么队列和任务,线程的创建和回收不需要程序员操作,有队列负责. 串行队列:队列中的任务只会顺序执行(类似跑步) dispatch_queue_t q = dispatch_queue_create(“....”, DISPATCH_QUEUE_SER

11.1-全栈Java笔记:多线程技术的基本概念

多线程是JAVA语言的重要特性,大量应用于网络编程.应用于服务器端程序的开发.以及最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层就是多线程的应用.UI界面的主线程绘制界面,如果有一个耗时的操作发生则启动新的线程,完全不影响主线程的工作.当这个线程工作完毕后,再更新到主界面上. 我们可以上百人.上千人.上万人同时访问某个网站,其实,网站服务器也是基于多线程的原理.如果没有多线程,服务器处理速度会极大降低. 多线程应用于计算机的

多线程及多进程部分概念汇总

1.线程的基本概念.线程的基本状态及状态之间的关系? 1.1线程概念 >>是进程中的一个执行控制单元,执行顺序流.同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈.线程在切换时负荷小,因此,线程也被称为轻负荷进程. 一个进程中至少有一个线程在负责控制程序的执行 一个进程中如果只有一个执行路径,这个程序称为单线程 一个进程中有多个执行路径时,这个程序成为多线程 1.2线程的基本状态 1.新建 new语句创建的线程对象处于新建状态,仅被分配了内存. 2.等待 当线程在

IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dispatch_queue_t,一种先进先出的数据结构,线程的创建和回收不需要程序员操作,由队列负责. 串行队列:队列中的任务只会顺序执行(类似跑步) dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial); 并

多线程中锁的概念python

好几个人问我给资源加锁是怎么回事,其实并不是给资源加锁, 而是用锁去锁定资源,你可以定义多个锁, 像下面的代码, 当你需要独占某一资源时,任何一个锁都可以锁这个资源 就好比你用不同的锁都可以把相同的一个门锁住是一个道理 #coding: utf-8 import threading import time counter = 0 counter_lock = threading.Lock() #只是定义一个锁,并不是给资源加锁,你可以定义多个锁,像下两行代码,当你需要占用这个资源时,任何一个锁都

多线程编程之基础概念

一.什么是线程 线程(thread)是进程中某个单一顺序的控制流.也被称为轻量进程(lightweight processes).计算机科学术语,指运行中的程序的调度单位. 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行. 在