java的多线程(一)
来源:互联网 发布:关于程序员的搞笑图片 编辑:程序博客网 时间:2024/05/19 11:49
Java的多线程:
博主周廷宇原创,不得转载,支持深度交流,有意者可加 qq 656358805!
---线程是程序中不同的执行路径。
---进程是一个静态的概念比如一个exe文件,而进程的执行是指进程中main方法开始执行,也就是说计算机中所执行的都是线程,一个进程的代码被放入代码区时准备执行,我们说这个过程为进程的就绪,在单核系统中多线程只是人的幻觉。Java.lang包中是由thread组成的,thread的run方法是当前thread(执行路径)的执行代码。Start为线程的启动,下面是实例:
例子1: 第一种启动多线程的方法,实现Runnable//不能抛出异常,如果想抛出异常则必要使用cail创建线程。
main方法中代码:
{
Runner1 r=new Runner1();
Thread t=new Thread(r);
T.start();
Main 中其他执行代码
}
Class Runner1 implements Runnable
{
Public void run()
{
执行代码;
}
}
例子2: 第二种方法,继承Thread
main方法中代码:
{
Runner1 r=new Runner1();
r.start();
Main 中其他执行代码
}
Class Runner1 extends Thread
{
Public void run()
{
执行代码;
}
}
Java中线程状态:
New状态
Runnable(启动start()之后)可运行状态(当得到cpu资源时,则可立即执行)
Terminated终止状态(调用stop之后或该线程执行完)
Waiting无穷等待状态(sleep之后),直到被唤醒/timed waiting有限等待(sleep(time)之后) 等待状态被唤醒后得不到cpu则成阻塞状态,而阻塞解决之后一定是进入就绪状态。
Thread中的重要方法和状态:
Thread.getname 得到当前线程名。
停止线程:自然执行完终止/外部干涉,说白了就是用一个判断和布尔型控制线程,stop方法就是把布尔型转为false,但是Thread中的stop不推荐使用。
线程阻塞:
Join方法,合并线程。 调用此方法时注意,在相对主线程代码的某一个位置中加入分支线程t(t.join()),此时相对主线程中成阻塞,直到加入的线程执行完再转入就绪状态。
yield方法暂停本线程,此方法被写入到那个线程中则暂停那个线程,但是注意!所谓的暂停并不是真正意义的暂停,因为cpu的轮转是不定的,所以当cpu在调用暂停方法语句的上一句轮转,下一次还会执行预被暂停的线程。
Sleep方法暂停线程,休眠某一段时间,休眠时间内不会释放锁。(锁的定义再说) 比如倒计时和模拟网络延迟。
isAlive方法判断线程是否还没终止。
GetPriority方法,获得线程优先级。
Setpriority方法,设置线程优先级数值。
Setname方法,设置线程名。
CurrentThread 取得当前正在运行线程对象(本身),注意返回的是线程类,可以继续调用本线程其它方法。
线程名字:不手动起名则默认从0开始。
线程的优先级:三个常量,每个常量会让改变线程得到cpu的概率,注意!这个优先级不是绝对的,只是单纯地改变概率。
线程的同步(并发):多线程访问同一个资源---->线程安全,synchronized,线程访问类需要先访问这个锁。
注意!这里强调多线程访问同一个资源,比如说访问同一个静态变变量,或者同一个静态方法,如果该方法不是同步的,那么可能会有多个线程同时进入这个方法中,那么这个方法的过度执行是否安全就不一定了,相反,如果这个方法是同步的,那么某一时间只有一个线程可以进入,直到此线程执行完了,别的线程才有机会进入代码块执行。注意!这个锁使用的位置很重要,换句话说被锁的代码是同步的,那么没被锁的代码块可能会有多个线程在此等待,从而导致代码的崩溃。
- java的多线程(一)
- java的多线程(一)
- java多线程:多线程(一)
- Java--多线程(一)
- java(多线程 一)
- JAVA多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- java---多线程(一)
- Java多线程(一)
- Java多线程(一)
- java多线程(一)
- java多线程(一)
- Java多线程(一)
- C++函数之函数与数组
- python——高阶函数——map reduce filter sorted
- Android开源项目LifeUtil 之数据展示
- 即拿即用-Android单线程断点下载
- C/C++ 共用体
- java的多线程(一)
- Hdu1576 A-A/B 扩展欧几里德
- Web响应式开发
- PostgreSQL 性能调优
- 老调重弹:JDBC系列 之 <驱动加载原理全面解析>
- 安卓·为控件添加事件
- ubuntu 安装googlepinyin
- Java枚举常量的使用
- 用栈实现递归(二叉树的遍历)