java的多线程(一)

来源:互联网 发布:关于程序员的搞笑图片 编辑:程序博客网 时间:2024/05/19 11:49

Java的多线程:

 

博主周廷宇原创,不得转载,支持深度交流,有意者可加 qq 656358805!


---线程是程序中不同的执行路径。

---进程是一个静态的概念比如一个exe文件,而进程的执行是指进程中main方法开始执行,也就是说计算机中所执行的都是线程,一个进程的代码被放入代码区时准备执行,我们说这个过程为进程的就绪,在单核系统中多线程只是人的幻觉。Java.lang包中是由thread组成的,threadrun方法是当前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有限等待(sleeptime)之后)  等待状态被唤醒后得不到cpu则成阻塞状态,而阻塞解决之后一定是进入就绪状态。

 

Thread中的重要方法和状态:

Thread.getname 得到当前线程名。

 

停止线程:自然执行完终止/外部干涉,说白了就是用一个判断和布尔型控制线程,stop方法就是把布尔型转为false,但是Thread中的stop不推荐使用。

 

线程阻塞:

Join方法,合并线程。 调用此方法时注意,在相对主线程代码的某一个位置中加入分支线程tt.join()),此时相对主线程中成阻塞,直到加入的线程执行完再转入就绪状态。

 

yield方法暂停本线程,此方法被写入到那个线程中则暂停那个线程,但是注意!所谓的暂停并不是真正意义的暂停,因为cpu的轮转是不定的,所以当cpu在调用暂停方法语句的上一句轮转,下一次还会执行预被暂停的线程。

 

Sleep方法暂停线程,休眠某一段时间,休眠时间内不会释放锁。(锁的定义再说) 比如倒计时和模拟网络延迟。

 

isAlive方法判断线程是否还没终止。

GetPriority方法,获得线程优先级。

Setpriority方法,设置线程优先级数值。

Setname方法,设置线程名。

CurrentThread 取得当前正在运行线程对象(本身),注意返回的是线程类,可以继续调用本线程其它方法。

 

线程名字:不手动起名则默认从0开始。

线程的优先级:三个常量,每个常量会让改变线程得到cpu的概率,注意!这个优先级不是绝对的,只是单纯地改变概率。

 

线程的同步(并发):多线程访问同一个资源---->线程安全,synchronized,线程访问类需要先访问这个锁。

注意!这里强调多线程访问同一个资源,比如说访问同一个静态变变量,或者同一个静态方法,如果该方法不是同步的,那么可能会有多个线程同时进入这个方法中,那么这个方法的过度执行是否安全就不一定了,相反,如果这个方法是同步的,那么某一时间只有一个线程可以进入,直到此线程执行完了,别的线程才有机会进入代码块执行。注意!这个锁使用的位置很重要,换句话说被锁的代码是同步的,那么没被锁的代码块可能会有多个线程在此等待,从而导致代码的崩溃。

0 0
原创粉丝点击