Java_多线程基础(一)
(一)线程与进程
(二)为什么要使用多线程?
(三)多线程使用中的注意事项
(四)多线程的常用创建方式
(一)线程与进程
什么是进程?
每个正在系统上运行的程序都是一个进程,每个进程包含一到多个线程,其中必定有一个主线程。
什么是线程?
线程是一组指令的集合,是一条独立的运行线路,它可以在程序里独立执行。
一条线程的死亡不影响其它线程的运行。
总结:
进程是所有线程的集合,每一个线程是进程中的一条执行路径。
(二)为什么要使用多线程?
多线程的好处是高程序的效率。
(三)多线程使用中的注意事项
使用继承Thread类还是使用实现Runnable接口好?
使用实现Runnable接口好,原因:实现了接口还可以继续继承,继承了类不能再继承。
启动线程是使用调用start方法还是run方法?
开启线程不是调用run方法,而是start方法
调用run只是使用实例调用方法。
(四)多线程的常用创建方式
1)通过继承Thread类重写Run方法创建多线程
首先:创建一个继承了Thread类的子类,再在子类中重写Run()方法;
代码如下:
public class CreateThread extends Thread {
// run方法中 编写 多线程 需要执行的代码
public void run() {
for (inti = 0; i< 10; i++) {
System.out.println("i:" + i);
}
}
}
然后:在main方法中通过new一个子类的实体来创建一个线程,并调用start()方法来实现多线程;
代码如下:
public class ThreadDemo {
public static void main(String[] args) {
System.out.println("-----多线程创建开始-----");
// 1.创建一个线程
CreateThread createThread = new CreateThread();
// 2.开始执行线程 注意 开启线程不是调用run方法,而是start方法
System.out.println("-----多线程创建启动-----");r
createThread.start();
System.out.println("-----多线程创建结束-----");
}
}
2)通过实现Runable接口创建多线程
首先:创建一个实现 Runnable接口的实现类;
代码如下:
public class CreateRunnable implements Runnable {
@Override
// run方法中 编写 多线程 需要执行的代码
public void run() {
for (inti = 0; i< 10; i++) {
System.out.println("i:" + i);
}
}
}
然后:在main方法中通过new一个实现类的对象来创建一个线程,同时new一个Thread类的对象 ,并将实体类对象作为参数传递给Thread类,最后通过使用Thread对象调用start()方法来实现多线程;
代码如下:
public class ThreadDemo2 {
public static void main(String[] args) {
System.out.println("-----多线程创建开始-----");
// 1.创建一个线程
CreateRunnable createThread = new CreateRunnable();
// 2.开始执行线程 注意 开启线程不是调用run方法,而是start方法
System.out.println("-----多线程创建启动-----");
Thread thread = new Thread(createThread);
thread.start();
System.out.println("-----多线程创建结束-----");
}
}
3)使用匿名内部类创建多线程
概念:匿名内部类就是没有名字的内部类。这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼。
如果满足下面的一些条件,使用匿名内部类是比较合适的:
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效
用匿名内部类创建多线程有两种方式,和创建一个线程是一样的。
①:继承Thread:
代码如下:
public class Test{
public static void main(String[] args) {
System.out.println("-----多线程创建开始-----");
(new Runnable() {
public void run() {
//do something
}
).start();
System.out.println("-----多线程创建结束-----");
}
}
②:实现 Runnable接口:
代码如下:
public class Test{
public static void main(String[] args) {
System.out.println("-----多线程创建开始-----");
(new Runnable() {
public void run() {
//do something
};
}) { }.start(); System.out.println("-----多线程创建结束-----");
}
}