java多线程学习笔记

时间:2023-02-25 11:57:11

概念:进程,一个程序的执行就是一个进程,如qq软件的执行,搜狗浏览器的执行,这就是一个进程。进程之间的通信有信号量、套接字等。

            线程,就是一个程序下的多种并发执行操作,一个浏览器可能同时刷新多个网页,这就是多线程。在程序执行过程中,多个进程之间内存是共享的。

java多线程实现:

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。

一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。(java中一个类只能有一个父类)

      

class MyThread1 extends Thread{
public static int index;
public void run(){
for (int i=0;i<100;i++)
System.out.println(getName()+":"+index++);
}
}
public class TestThread {
public static void main(String[] args){
MyThread1 t1 =new MyThread1();
MyThread1 t2 = new MyThread1();
MyThread1 t3 = new MyThread1();
t1.start();
t2.start();
t3.start();
new MyThread1().start();
new MyThread1().start();

}
}
继承Thread类来实现多线程,只要对run()进行重写,在需要执行的地方调用该类的start()方法即可。

      但是java中一个类只有一个父类,也就是说一个类要是继承了别的类就无法去继承Thread类来实现多线程了,此时我们用Runnable接口实现多线程就能解决这个问题,而且在java中一个类是允许实现多个接口的。

      但是有个一问题,就是Runnable接口实现的类中没有start()方法,只有Thread实现的类中有这个方法,我们发现Thread类有一个构造方法:public Thread(Runnable targer)此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程是可行的。我们来看下面的代码:

    

class Wife {
public static int index;
}
class Son extends Wife implements Runnable{
public String name;
public Son(String name){
this.name = name;
}
@Override
public void run() {
//To change body of implemented methods use File | Settings | File Templates.
for (int i=0;i<100;i++)
System.out.println(this.name+": "+index++);
}
}
public class TestThread {
public static void main(String[] args){

Son s1 =new Son("A");
Son s2 = new Son("B");
new Thread(s1).start();
new Thread(s2).start();
}
}
代码中,Son类继承了Wife类就没有办法再继承Thread类了,但是我们用Runnable接口实现了多线程的操作!