`
guojian19911218
  • 浏览: 2254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程总结

阅读更多
1、并行和并发
(1)并行:并行是一个宏观的概念,指在同一时间点上同时运行。譬如CPU是多核的,一个处理听歌,一个处理打游戏。
(2)并发:并发是一个微观概念,指在同一时间段有多个线程运行。譬如在一个进程内,有两个线程,分别听歌和打游戏,那么CPU会分配时间片,线程竞争,感觉像是一起发生,其实不是。
 
2、进程和线程
进程:是一块包含了某些资源的内存区域。操作系统利用进程把它的工作化为一些功能单元。
线程:线程是进程的一个实体,是CPU调度的分派的基本单位。线程基本有不拥有系统资源,只拥有一点在运行时必不可少的资源(如程序计数器,一组寄存器和栈),它与同属与一个进程的其他的线程共享进程所拥有的全部资源。
进程和线程的区别:
进程是不能进行信息共享的,一个进程中的多线程享有该进程的全部资源,是信息共享的(即并发)。
创建进程耗资源,线程相对不耗资源。
一个进程有多个线程,一个线程只归属于一个进程。
3、并发的三种方式:
(1)synchronized修饰方法;
1)修饰静态方法时,锁住的是整个类的class,即这个类的所有对象。
2)修饰非静态方法时,锁住的是访问方法的当前对象;
(2)synchronized修饰方法块;
在修饰代码块时,应减少代码块中并发中的代码。
(3)使用lock;
ReentrantLock lock=new ReentrantLock();
上锁:lock.lock();
释放锁:lock.unlock();
4、Thread状态
1)新建状态(new):新创建一个线程。
2)可运行状态:运行了线程的start()方法。
(1)就绪状态:等待JVM的调度
(2)运行状态:线程对象获得了JVM的调度
3)等待状态:执行了wait()方法
4)计时等待状态:运行了sleep()或者wait()(注:wait方法加了时间参数)方法
5)阻塞状态:join()方法,或者发出了I/O请求
6)终止状态:线程完成或者抛出异常。
5、wait(),notify(),notifyAll()的应用
通常,多线程之间需要协调工作:如果条件不满足,则等待;当条件满足时,等待该条件的线程将被唤醒。
注意:wait(),notify(),notifyAll()三个方法是不属于Thread的,是属于对象的,必须应用到synchronized()修饰过方法或者快的时候。否则会报Java.lang.IllegalMonitorStateException
6、线程休眠sleep():让执行的线程暂停一段时间,进入即时等待状态。
注意:sleep()是不释放锁的,wait()是释放锁的。
7、联合线程join()
强制运行某个线程。
package day1.ThreadThree;
class joinDemo implements Runnable{
 
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("demo"+i);
}
}
}
public class ThreadJoin {
public static void main(String[] args) throws InterruptedException {
Thread td=new Thread(new joinDemo());
for (int i = 0; i < 100; i++) {
System.out.println("main"+i);
if (i==10) {
td.start();
}
if (i==20) {
td.join();
}
}
}
}
主线程在运行第十次的时候,线程td开始运行,这时主线程和线程td依次进行竞争,在主线程i=20时,td运行join,强制运行,当td运行完后,在执行主线程。
 
7、线程优先级
每个线程都有优先级,优先级的高低只和线程获得执行机会的次数多少有关,并非优先级越高的的就一定执行,哪个线程的先运行取决于CPU的调度。
MAX_PRIORITY=10 最高优先级
MIN_PRORITY=1 最低优先级
NORM_PRIORITY=5 默认优先级
每个线程都有默认的优先级,主线程默认优先级是5,如果A线程创建了B线程,那么B线程和A线程拥有相同的优先级。
注意:不同的操作系统支持的线程优先级是不同的,建议使用上述三个优先级,不要自定义。
8、线程礼让
yiled():表示当前线程对象提示调度器自己愿意让出CPU资源,但是调度器可以自由的忽略该提示。
调用该方法后,线程对象进入就绪状态,所以完全有可能:某个线程调用yield()之后,线程调度器又把它调度出来重新执行。
从Java7提供的文档上可以清楚的看出,开发中很少会使用该方法,该方法主要用于调试或测试,它可能有助于因多线程竞争条件下的错误重现现象。
sleep()和yield() 方法的区别:
1)都能使当前处于运行状态的线程放弃CPU,把运行的机会给其他线程。
2)sleep()方法会给其他线程运行机会,但是不考虑其他线程的优先级,yield()方法只会给相同优先级或者更高优先级的线程运行的机会。
3)调用sleep()方法后,线程进入计时等待状态,调用yield()方法后,线程进入就绪状态。
9、前台线程和后台线程
JVM在运行时,会有两个线程。
主线程和后台GC处理线程。
后台线程(即:daemon=false):会在主线程结束后立马停止。
默认为前台线程(),想改为后台线程。
thread.setDaemon(true);
 
分享到:
评论

相关推荐

    C#.net同步异步SOCKET通讯和多线程总结2[参照].pdf

    C#.net 同步异步 SOCKET 通讯和多线程总结 本文旨在总结 C#.net 中的同步异步 SOCKET 通讯和多线程编程,涵盖服务端和客户端的实现细节。 一、服务端实现 服务端使用 System.Net 和 System.Net.Sockets 命名空间...

    windows多线程总结

    【Windows多线程总结】 Windows操作系统提供了一套完整的API来支持多线程编程,使得开发者可以在同一进程中同时执行多个线程,实现并发处理任务。本文将深入探讨Windows多线程编程的基本概念、线程同步、线程池以及...

    C#.net同步异步SOCKET通讯和多线程总结

    C#.net同步异步SOCKET通讯和多线程总结 C#.net同步异步SOCKET通讯和多线程总结是指在C#.net环境下实现的同步异步套接字通信和多线程编程的总结。套接字(Socket)是tcp/ip网络协议接口,内部定义了许多的函数和例程...

    C++多线程总结[归纳].pdf

    C++多线程总结 本文档对C++多线程编程进行了总结,介绍了三种创建线程的方法:CreateThread函数、AfxBeginThread函数和_beginthread()/_beginthreadex()函数,同时对线程的管理和终止进行了详细的讲解。 ...

    c#多线程总结文档.ppt

    c# 多线程总结

    MFC 多线程总结

    在Windows应用程序开发中,MFC(Microsoft Foundation Classes)框架提供了对多线程的支持,使得开发者可以构建更加复杂的并发系统。MFC中的线程分为两类:工作者线程和用户界面线程,它们各自有不同的特性和用途。 ...

    C#dotnet同步异步SOCKET通讯和多线程总结

    C#dotnet同步异步SOCKET通讯和多线程总结

    Java并发编程实践(java concurrency in practice)pdf (java多线程总结.ppt)

    配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。

    java多线程总结

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关知识点,包括线程的创建、线程的状态、同步机制以及线程安全问题。 1. **线程的创建*...

    C# 多线程总结

    本文将对C#多线程进行详细总结,包括如何创建线程、同步问题以及使用不同的同步机制。 1. 创建线程 1.1 异步委托方式 异步委托是通过.NET线程池创建线程的方法,这些线程默认为后台线程。使用BeginInvoke启动异步...

    Java多线程的总结

    Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用...

    iOS 开发 之 多线程总结

    本文将对多线程进行深入总结,主要涵盖线程的基本概念、使用多线程的原因以及在iPhone平台上创建和管理线程的几种方法。 一、线程简介 线程是操作系统分配CPU时间的基本单位,它可以看作是程序执行流的最小单元。...

    iOS 多线程总结

    在iOS开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用的高效运行,提升用户体验。本文将深入探讨四种主要的iOS多线程机制:Pthreads、NSThread、GCD(Grand Central Dispatch)以及NSOperation和...

    JavaSE专题-多线程总结.doc

    JavaSE专题的多线程是Java编程中至关重要的一部分,它涉及到如何在单个程序中同时执行多个任务。以下是对多线程技术的详细说明: 1. **多线程技术介绍** - **进程**:一个进程是操作系统分配给应用程序的内存空间...

Global site tag (gtag.js) - Google Analytics