您的位置:首页 > 编程语言 > Java开发

JAVA线程基础

2016-01-14 19:33 204 查看
本文主要是我对线程的一些基础了解,可能会有一些有问题,希望不会误导大家;我会在后面继续完善,加上例子说明,改进不足的地方。

1.多线程的定义:对于同一资源,多个任务请求占有时,同时对多项任务进行控制。

2,线程的作用:实现同时执行多任务,如边吃饭边听歌:

(1),普通的类:

public class Demo {

/**

* 听音乐

*/

private static void music(){

for(int i=0;i<1000;i++){

System.out.println("听音乐");

}

}

/**

* 吃饭

*/

private static void eat(){

for(int i=0;i<1000;i++){

System.out.println("吃饭");

}

}

public static void main(String[] args) {

music();

eat();

}

}

只能先听完歌,在吃饭。

(2),线程:

public class Music extends Thread{

public void run() {

for(int i=0;i<1000;i++){

try {

Thread.sleep(100);

System.out.println("听音乐");

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

public class Eat extends Thread{

public void run() {

for(int i=0;i<1000;i++){

try {

Thread.sleep(100);

System.out.println("吃饭");

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

public static void main(String[] args) {

/**

* 利用多线程实现一边吃饭一边听歌

*/

Music musicThread=new Music();

Eat eatThread=new Eat();

musicThread.start();

eatThread.start();

}

}

这样能使吃饭和听歌“同时“进行,即边吃饭边听歌。

(3),线程可以实现资源共享:

Thread1 t1=new Thread1("线程资源共享");

Thread t11=new Thread(t1);

Thread t12=new Thread(t1);

Thread t13=new Thread(t1);

Thread t14=new Thread(t1);

...

t11.start();

t12.start();

t13.start();

...

3.线程的状态:

(1),创建状态 在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,它已经有了相应的 内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可采用 Thread 类的构造方法来实现,例 如, “Threadthread=newThread();” 。

(2),就绪状态 新建线程对象后,调用该线程的 start()方法就可以启动线程。当线程启动时,线程进入就绪状态。此时, 线程将进入线程队列排队,等待 CPU 服务,这表明它已经具备了运行条件。

(3),运行状态 当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象 的 run()方法。run()方法定义了该线程的操作和功能。

(4),堵塞状态 一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作时,将让出 CPU 并暂时中止自己的执行,进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被 消除后,线程才可以转入就绪状态。

(5),死亡状态 线程调用 stop()方法时或 run()方法执行结束后,即处于死亡状态。处于死亡状态的线程不具有继续运 行的能力.

4.实现线程的两种方式:

(1),继承Thead()类,线程的启动方法:线程对象的start方法直接启动。

public class Thread1 extends Thread{

public Thread1(...) {

super();

...

}

public void run() {

...

}

public static void main(String[] args) {

Thread1 t1=new Thread1("线程");

t1.start();

}

}

(2),实现Runnable接口,线程的启动方法:并不能直接用新建的线程对象加start方法启动,像如下一样启动,

public class Thread1 implements Runnable{

public Thread1(...) {

super();

}

public synchronized void run() {

...

}

public static void main(String[] args) {

Thread1 t=new Thread1("线程");

Thread t1=new Thread(t);

t1.start();

}

}

5:线程的常用方法:

(1),getName(); 返回该线程的名称。

(2),currentThread();返回对当前正在执行的线程对象的引用。

(3),isAlive();测试线程是否处于活动状态。

(4),sleep();线程休眠。

(5),setPriority(intnewPriority);更改线程的优先级。

(6),yield();暂停当前正在执行的线程对象,并执行其他线程

6:线程同步:

(1),在run方法前加synchronized关键字,使run方法同时只能被一个线程调用。

(2),同步块:把run方法的方法体放入同步块中:

public void run(){

synchronized(this){

run方法体

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: