java线程
来源:互联网 发布:电脑包什么牌子好 知乎 编辑:程序博客网 时间:2024/05/16 16:09
1、线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机自己给的名字,一个是你自己的定的名字。在没有指定线程名字的情况下,虚拟机总会为线程指定名字,并且主线程的名字总是mian,非主线程的名字不确定。
2、线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
3、获取当前线程的对象的方法是:Thread.currentThread();
4、在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续时间也无法保证。
5、当线程目标run()方法结束时该线程完成。
6、一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且只能一次。一个可运行的线程或死线程可以被重新启动。
7、线程的调度是JVM的一部分,在一个CPU的机器上上,实际上一次只能运行一个线程。一次只有一个线程栈执行。JVM线程调度程序决定实际运行哪个处于可运行状态的线程。
线程的几种状态:
在Java当中,线程通常都有五种状态,新建、就绪、运行、阻塞和死亡。
新建状态:在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。
就绪状态:当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当
前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
运行状态:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
阻塞状态:线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。
sleep,suspend,wait等方法都可以导致线程阻塞。
死亡状态:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪状态。
多个线程访问同一资源时,容易出现资源冲突的问题。解决这种问题可以使用synchronized关键字
synchronized的作用域有两种:实例范围和类范围。
实例范围同步方法:可以防止多个线程同时访问这个对象实例的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法。
实例范围同步块:表示只对这个区块的资源实行互斥访问,它的作用域是当前对象。
类范围的同步方法:synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。也就是说在一个JVM中,同一时间最多有一个该类的静态同步方法在执行。这样的方法可以应用到多线程的同步中,实现各线程直接的数据共享和互动。
类范围同步块:在static 方法内加同步区块:sychronized (类名.class) { /*区块*/}
注意:synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法。
进程是运行着的程序,每个进程在内存中都有自己独立的内存空间。在每个进程中,存在多个线程(一个线程是进程的一个任务序列),在只有一个CPU的计算机上,同一个时间点上只能执行一个线程。
浏览器启动加载慢的原因是CPU处理不过来。CPU处理其他线程,此浏览器中的线程没有被执行,所以无法加载
Java是为数不多的支持多线程的语言
由一个对象创建多个线程,这样,多个线程执行的是同一个对象中的run方法,操作的是同一个对象。当多个线程对象访问同一个对象的一个方法时,要注意线程问题。
- Java线程:什么是线程
- Java线程:线程池
- java线程--线程退出
- JAVA-线程/线程锁
- Java线程:什么是线程
- Java线程:线程中断
- Java线程:线程状态
- Java线程: 线程调度
- Java线程:线程交互
- java--线程--线程池
- java 线程
- Java线程
- java线程
- java线程
- Java线程
- Java线程
- java线程
- JAVA 线程
- iOS第三方开源库的吐槽和备忘
- 设计各种图(流程图,思维导图,UML,拓扑图,ER图)简介
- 小白学c++之epoll&&poll&&select模型
- 王立平--Handler
- Win8下如何安装Win7 or Win7下如何安装win8?
- java线程
- C++初学者的足迹9 作业报告8 计算每月多少天
- 高效回文判断方法(java)
- poj 2236 Wireless Network 并查集
- ORACLE直接路径操作
- Windows 7 IIS WAS和W3SVC服务无法启动
- Android开源--PullToRefresh
- Spring事务配置的五种方式
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理