JAVA线程基础

来源:互联网 发布:python 创建数据库 编辑:程序博客网 时间:2024/06/14 08:56

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


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方法体

}

}

0 0
原创粉丝点击