线程学习总结
1.基础知识
1.每一个程序就是一个进程,一个进程有一个或者多个线程组成。
2.进程之间的通信,一般要通过网络。如在异地的两个QQ程序之间的通信,这就是两个进程通过网络进行数据交换。
3.进程中的各个线程可以共享同一个进程的资源数据。
2.线程基础
1.Runnable接口是实现线程的接口。
2.用Thread类可以实例化一个线程,Thread就是实现了Runnable接口的线程类。
3.我们要重写线程类中的run()方法。
4.线程的启动:通过调用线程对象的start()方法可以启动线程,让线程执行线程类中的run()方法。
3.线程的创建
1.如果一个类A继承了Thread类,那么要实例化线程类对象,就可以直接
A a = new A();
2.如果一个类B是实现了Runnable接口,那么要实例化线程类对象,格式是
B b = new B();//先实例化B类
Thread th = new Thread(b);//再创建线程类对象,并以B的实例化对象b作为参数
3.线程的启动,调用线程对象的start()方法。
a.start();
th.start();
4.无论是继承了Thread类还是实现了Runnable接口,其实都是实现了Runnable接口。我们要重写类中的run()方法。
5.下面是以内部类的方式创建线程的实例
public class InterThreadTest {
/**
* 测试匿名线程创建,以内部类的方式创建线程
* @author XMH
* @param args
*/
// 主程序入口
public static void main(String[] args) {
InterThreadTest interTT = new InterThreadTest();
for (int i = 0; i < 10; i++) {
// 调用本内中的方法
interTT.startMyThread(i);
}
}
public void startMyThread(int threadID) {
// 要传入匿名线程内使用的参数必须定义为final型
final int id = threadID;
// 内部的线程类
java.lang.Runnable runner = new java.lang.Runnable() {
public void run() {//重写run()方法
boolean flag = true;
while (flag) {
try {
Thread.sleep(3000);//线程休眠3000毫秒,即3秒
// 在匿名线程内中调用类中的其他方法
otherMethod(id);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
// 最后启动这个内部线程
Thread t = new Thread(runner);
t.start();
}
private void otherMethod(int i) {
System.out.println("可以直接调用内中的其他方法" + i);
}
}