Java多线程
来源:互联网 发布:如何成为数据分析师 编辑:程序博客网 时间:2024/06/06 21:40
线程与进程
- 什么是进程
进程就是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。
- 什么是线程
进程中所包含的一个或多个执行单元称为线程
进程就是我们的独立的应用程序,当系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。进程本身拥有一个私有的虚拟地址空间,相互
之间是不能相互通信的,但是我们可以通过让不同进程去访问计算机中的共享空间或着外设,达到进程间通信的目的。
- 什么是并发
多个线程或进程同时执行只是我们感官上的一种表现。事实上进程或线程之间是并发执行的。操作系统(OS)将时间片尽可能均匀的划分给不同的进程或者线
程,在程序运行时,获得时间片的线程得以执行,而未获得的线程则暂停等待,程序运行的这种走走停停的现象称为并发。
- 线程的状态
- New:当我们创建一个线程时,该线程没有纳入线程调度,其处于一个new状态
- Runnable:当调用线程的start方法后,该线程纳入线程调度的控制,其处于一个可运行状态,等待分配时间片段并发执行
- Running:当该线程被分配到了时间片段后其被CPU运行,该线程处于running状态
- Blocked:当线程在运行过程中可能会出现阻塞现象
- Dead:当线程的任务全部运行完毕,或在运行过程中抛出了一个未捕获的异常,线程结束,等待回收
Java中创建线程
- 继承自Thread类
class ToRun extends Thread{ @Override public void run() { //自己的逻辑代码 }}
- 实现Runnable接口
class ToRun2 implements Runnable{ @Override public void run() { //自己的逻辑代码 }}
- 使用内部类创建线程
- 继承Thread方式
Thread t2 = new Thread(){ @Override public void run() { super.run(); } };
- Runnabel方式
Thread t1 = new Thread(new Runnable() { @Override public void run() { } });
线程优先级
线程的优先级被划分为10级,值分别为1-10,其中1最低,10最高。线程提供了3个常量来表示最低、最高和默认优先级:
/** * The minimum priority that a thread can have. */ public final static int MIN_PRIORITY = 1; /** * The default priority that is assigned to a thread. */ public final static int NORM_PRIORITY = 5; /** * The maximum priority that a thread can have. */ public final static int MAX_PRIORITY = 10;默认的线程的优先级与创建它的线程的优先级相同
public final void setPriority(int newPriority)更改线程的优先级。不能简单的认为优先级高的线程一定优先执行,高优先级的线程只是建议CPU优先执行高优先级的线程,提高该线程执行的概率,至于CPU具体怎末执行就不是我们能够干预的。
守护线程
- 将线程设置为守护线程
public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。该方法必须在启动线程前调用。守护线程的特点是:当进程中只剩下守护线程时,所有的守护线程将被强制终止。(GC是守护线程)
线程阻塞
- sleep()方法(调用此方法要捕获异常)
public static void sleep(long millis) throws InterruptedException在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。sleep()是让调用它的线程阻塞固定的时间,在哪个线程中调用,哪个线程阻塞。
- sleep和wait()的区别:
- 这两个方法来自不同的类,sleep()方法来自Thread类,wait()来自Object类
- sleep()释放资源,但不释放锁;wait()释放资源释放锁。
- 使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
阅读全文
0 0
- 【Java多线程】多线程死锁
- Java 多线程
- java 多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA多线程
- java多线程
- JAVA 多线程
- Java多线程
- java多线程
- JAVA 多线程
- Java 多线程
- Java 多线程
- java多线程
- Java 多线程
- Java多线程
- java 多线程
- HTTP协议--简单认识TCP/IP
- java super继承测试
- isbn号码
- TCP/UDP/IP分片
- 正则表达式 字符转义
- Java多线程
- 员工信息查询
- iOS reason: '-[__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance 0x60800
- log4j,logback,slf4j之间的关系详解
- Two Sum
- n2n将P2P从应用搬到网络
- 正则表达式 字符类
- 数据结构第二周项目--C/C++语言中函数传递的三种方式
- java中 equals的用法(object 和 其他类),以及与 == 的比较