Java多线程入门

Java多线程入门


线程是操作系统课程中提到的一个概念,是系统调度和分配的最小单元,其自身并不拥有系统资源,但与同属一个进程的其他线程共享进程所拥有的的全部资源。多线程编程可以使得程序共有两条或者两条以上的并发执行线索,即同时完成一个工作的多个部分。

1. 线程类


Java中线程有两方面的含义

  • 一条独立执行的线索
  • Thread类或继承了Thread类的对象

自定义线程类

  • 继承Thread
class a extends Thread{
    public void run()
    {

    }
}
  • 实现Runnable接口
class b implements Runnable{
     public void run(){    
     
     }
}

相对而言,第二种方法更好一些,因为Java中只能继承一个类,若是用接口实现自定义线程会更好。

2. 线程对象


  • 继承Thread
Thread aa=new a();
  • 实现Runnable接口
b bb=new b();

由于以上类b虽然实现了Runable接口,有多线程功能,然而其本身还不是一个线程,因此还要进行一下转化

b bb=new b();
Thread c=new Thread(bb);   //这里使用Thread构造器 public Thread(Runable t)

3. 线程启动


class b implements Runnable {
	public void run() {
		System.out.println("Just a test");
	}
}

public class Test {
	public static void main(String[] args) {
		b bb = new b();
		Thread c = new Thread(bb);
		//c.start();
		c.start();
	}
}

线程对象在一个生命周期(开始之后,结束之前)只能start一次
不然就会出现如下错误

4. 多线程启动

class a implements Runnable {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("Just a test a");
		}
	}
}

class b implements Runnable {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("Just a test b");
		}
	}
}

public class Test {
	public static void main(String[] args) {
		a aa = new a();
		b bb = new b();
		Thread c = new Thread(aa);
		Thread d = new Thread(bb);
		// c.start();
		c.start();
		d.start();
	}
}

结果为


前面先是打印了7个a,之后再是10个b,再是3个a。说明多线程运行时,结果并不是和想象中一致的,操作系统相关知识也有所解释,在操作系统中,线程是CPU调度单位,系统会为每一个线程分配一个时间片,如果某个线程的时间用光了,这个线程就会暂时转入就绪状态。因此上面程序运行的结果也就可以解释了,系统在多线程调度时并不会保证一个线程的启动时间和运行时间,线程可以使交替运行的,多次执行也可能会产生不同的结果。
再次运行程序,结果为

5. 线程的简单补充

  • 线程的优先级

Java中线程的优先级用1~10的整数来进行表示,数值越大优先级越高,默认优先级是5,子线程默认与其父线程的优先级相同

public class Test {
	public static void main(String[] args) {
		a aa = new a();
		b bb = new b();
		Thread c = new Thread(aa);
		Thread d = new Thread(bb);
		// c.start();
		c.setPriority(10);
		c.start();
		d.start();
	}
}

然而值得一提的是,尽管设置线程c的优先级更高,也不能完全保证c就一定会在d之前运行,这只是一个概率高低问题

posted @ 2017-03-10 20:40  江南何采莲  阅读(219)  评论(0编辑  收藏  举报