多线程-Thread Runnable

一个程序在电脑中开辟一个进程(也可能开两个或多个),但这个进程可以是多线程执行的,譬如迅雷的多线程下载功能,一个进程至少有一个线程。

多线程有两种方法,(1)通过创造新类继承Thread,然后重写run方法。(2)通过自定义类实现Runnable接口,然后重写run方法,再把这个类放入Thread实例化的括号中。

需要用实例化的对象调用start()才能使用jvm调用run方法,实现多线程,单单的调用run(),不能实现多线程,仅仅会执行run()。

多线程的两种实现方式,其中实现Runnable接口的方法,耦合性较小,建议使用,而继承Thread类的方法,耦合性较大,因为它没有将run方法与Thread类分离开。

可以使用匿名内部类继承Thread或实现Runnable的方式重写Run方法,再调用该线程的方式来创建多线程和启动多线程。

以下是四个小例子,前两个显示了两种创建多线程的方法,后两个显示了两种匿名内部类重写run方法并启动线程的方法。

例1:

public class MyThread extends Thread {
	
	public void run() {
		for(int i=0;i<100;i++){
			System.out.println("这是新建的线程"+i);
		}
	}

}
public class Test {
	//jvm找OS开了两条路径,对于cpu来说就有了两条路径,这两条路径会被cpu执行,cpu有自己选择的权利,因此会出现随机结果
	//你可以理解为两个线程抢夺cpu的资源
	public static void main(String[] args) {
		MyThread my=new MyThread();
		my.start();
		for(int i=0;i<100;i++){
			System.out.println("这是主线程"+i);
		}

	}

}

 例2:

public class RunThread implements Runnable {

	 
	public void run() {
		 for(int i=0;i<50;i++){
			 System.out.println("runable"+i);
		 }
		
	}
	

}
public class Test4 {

    public static void main(String[] args) {
        Thread t=new Thread(new RunThread());
        t.start();
        for(int i=0;i<60;i++){
            System.out.println("main"+i);
        }

    }

}

例3:

new Thread(){
            public void run(){
                for(int i=0;i<5;i++){
                    System.out.println("thread"+i);
                }
            }
        }.start();

例4:

Runnable r=new Runnable(){
            public void run(){
                for(int i=0;i<5;i++){
                    System.out.println("Runnable"+i);
                }
            }
        
        };
        Thread t=new Thread(r);
        t.start();

线程的Sleep(),括号里填写数字,表明该线程休眠多少毫秒

   getName(),以String类型返回该线程的名字

          Thread.currentThread(),以Thread类型返回当前进程

线程在运行过程中的状态图

  

猜你喜欢

转载自www.cnblogs.com/zhangrui0328/p/9224708.html