黑马程序员技术交流社区
标题:
多线程1
[打印本页]
作者:
fmi110
时间:
2015-9-25 15:01
标题:
多线程1
a
1、多线程:
概念:
1 进程:正在运行的程序
2 线程:进程中一个程序执行的控制单元(执行路径)。
P.S.
1、一个进程中可以有多个执行路径,称之为多线程。
2、一个进程中至少要有一个线程。
3、开启多个线程是为了同时运行多部分代码,每一个线程都有自己运行的内容,这个内容可以称为线程要执
行的任务。
多线程的好处:解决多部分代码同时运行的问题。
弊端:线程太多,会导致效率的降低。
因为,多个程序同时运行,cpu需要在各个线程间进行不停的切换,这也需要消耗资源
PS:JVM启动时,至少启动了两条线程:
1 执行main函数的线程
2 垃圾回收线程
————————————————————————————————————————————————————————————————————
class Test14 {
public static void main(String[] args) {
A a = new A();
a = null;
System.gc();// garbage collection
System.out.println(Thread.currentThread().getName() + " over");
}
}
class A {
@Override
protected void finalize() throws Throwable {
System.out.println("A 的 finalize()被调用,调用进程是:"
+ Thread.currentThread().getName());
}
}
输出结果:
main over
A 的 finalize()被调用,调用进程是:Finalizer
————————————————————————————————————————————————————————————————————
2、创建线程的方式:
方法1 继承Thread类:
1 定义类继承Thread类
2 重写run方法
3 直接创建Thread类的子类,并调用start()方法启动线程
方法2 定义类实现Runnable接口
1 定义类实现Runnable接口
2 重写run方法
3 创建实现Runnable接口的对象
4 将对象作为参数传递给一个Thread类的对象,并调用该对象的start()方法启动线程
实现Runnable接口的好处:
1. 将线程的任务从线程的子类中分离出来,进行了单独的封装,更符合面向对象的思想。
2. 避免了Java单继承的局限性。 所以,创建线程的第二种方式较为常用。
————————————————————————————————————————————————————————————————————
public class CreatThreadDemo {
public static void main(String[] args) {
new MyThread().start();
new Thread(new RunnableImpl()).start();
}
}
class MyThread extends Thread {
public void run() {
while (true) {
try {
Thread.sleep(200);// 父类没有抛出异常,子类调用有抛异常的方法时,只能进行catch处理
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("我是继承Thread创建的进程:"
+ Thread.currentThread().getName());
}
}
}
class RunnableImpl implements Runnable {
public void run() {
while (true) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("我是实现了Runnable创建的进程:"
+ Thread.currentThread().getName());
}
}
}
运行结果:
我是实现了Runnable创建的进程:Thread-1
我是继承Thread创建的进程:Thread-0
我是继承Thread创建的进程:Thread-0
我是实现了Runnable创建的进程:Thread-1
我是继承Thread创建的进程:Thread-0
我是实现了Runnable创建的进程:Thread-1
我是实现了Runnable创建的进程:Thread-1
————————————————————————————————————————————————————————————————————
PS:JVM创建的主线程的主任务定义在了主函数中,而自定义的线程其任务定义在run方法中,也就说
run方法是封装了自定义线程运行任务的函数
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2