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

JAVA多线程之多线程的实现

2016-05-13 11:05 399 查看
java实现多线程有两种方式:

继承Thread类并重写run方法;
实现Runnable接口.

  Thread类是专门用来创建线程和对线程进行操作的类。当某个类继承了Thread类之后,该类就叫做一个线程类。

  两种方法均需执行线程的start()方法为线程分配必须的系统资源、调度线程运行并执行线程的run()方法。

  start()方法是启动线程的唯一的方法。start()方法首先为线程的执行准备好系统资源,然后再去调用run()方法。一个线程只能启动一次,再次启动就不合法了。

  run()方法中放入了线程的工作,即我们要这个线程去做的所有事情。缺省状况下run()方法什么也不做。

  在具体应用中,采用哪种方法来构造线程要视情况而定。通常,当一个线程已经继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。下面是实例:

继承Thread类

public class TestThread1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Thread thread1 = new Thread1(10);
Thread thread2 = new Thread2(10);
thread1.start();
thread2.start();
}

}

class Thread1 extends Thread{
int times;
public Thread1(int times){
this.times = times;
}

@Override
public void run(){
int i = 0;
while(i < this.times){
System.out.println("I am Thread1");
i += 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Thread2 extends Thread{
int times;
public Thread2(int times){
this.times = times;
}

@Override
public void run(){
int i = 0;
while(i < this.times){
System.out.println("I am Thread2");
i += 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

 通过继承Thread类实现多线程的方式,使用时只需生成该类的对象,然后调用start()即可

实现Runnable接口

public class TestThread1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Thread thread1 = new Thread(new Thread1(10));
Thread thread2 = new Thread(new Thread2(10));
thread1.start();
thread2.start();
}

}

class Thread1 implements Runnable{
int times;
public Thread1(int times){
this.times = times;
}

@Override
public void run(){
// TODO Auto-generated method stub
int i = 0;
while(i < this.times){
System.out.println("I am Thread1");
i += 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Thread2 implements Runnable{
int times;
public Thread2(int times){
this.times = times;
}
@Override
public void run() {
// TODO Auto-generated method stub
int i = 0;
while(i < this.times){
System.out.println("I am Thread2");
i += 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
 通过实现runnable接口实现多线程,在使用的时候,首先要生成自定义的多线程对象,然后将该对象作为参数实例化一个Thread对象,再由该对象调用start方法启动.

关于如何终止线程

  线程的消亡不能通过调用stop()命令,而是让run()方法自然结束。stop()方法是不安全的,已经废弃.

  停止线程推荐的方式:设定一个标志变量,由该标志变量控制循环是继续执行还是跳出.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: