线程的实现与注意事项
- 进程开一个软件就叫开一个进程
- 线程一个进程里面可以包含多个线程,进程与线程是大与小,包含的关系。
线程
线程的开启方法
* 让类继承Thread
* 让类实现Runnable方法
注意
- * 同一个对象不能被多个线程操作*
- * 线程的操作主体都是Thread对象(或者是它的子类)由这个对象执行start方法*
区别在于
- 继承Thread类之后,直接就用这个子类去执行start方法
- 实现Runnable接口的话,是将这个类作为参数传入到Thread的构造方法里面,再由Thread来执行start方法。所以说,线程操作的主体都是Thread对象或者是它的子类对象。
具体实现方法
- 让类继承Thread
public class Entry{
public static void main(String[] args
{
//直接new 出对象,几个对象,就可以开几个线程
Mythread m1 = new Mythread();
Mythread m2 = new Mythread();
Mythread m3 = new Mythread();
//开启方法是用start(), (注意不要用run())
m1.start();
m2.start();
m3.start();
}
}
class MyThread extends Thread //继承Thread类
{
//重写run()方法
public void run()
{
//TODO 方法体
}
}
- 让类实现Runnable方法
public class Entry{
public static void main(String [] args)
{
//new 出对象
MyThread m = new MyThread();
//创建线程(三个不同的Thread对象,但是它们操作的是同一个MyThread对象)
Thread m1 = new Thread(m);
Thread m2 = new Thread(m);
Thread m3 = new Thread(m);
//开启线程
m1.start();
m2.start();
m3.start();
}
}
class MyThread implements Runnable{
public void run()
{
// TODO 方法体
}
}
两种方式的对比
- 复杂度
使用继承Thread的方式会比较简单一些,使用实现Runnable的方式会比较复杂一点
继承与实现(一对多)
如果使用了Thread就只能继承它一个,如果使用Runnable的话可以实现多个接口
操作对象
使用Thread时,被操作的对象不可以被多个线程同时操作。但是使用Runnable因为需要使用new Thread(target)的方式来创建线程,这里的target是可以传入同一个对象的。这样就可以不用把target里面的成员变量写成静态的。