线程

原创 2016年05月30日 20:17:42

进程:正在运行的程序。

线程:每一个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行,这些执行单元可以看做是程序执行的一条条线索,被称为线程。

线程的创建

1、单线程

public class T1{

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread t=new MyThread();
      t.run();
      while(true){
    	 System.out.println("Main方法在运行");
     }
	}

	
}
class MyThread{
		public void run(){
			while(true){
				System.out.println("MyThread类的方法在运行");
			}
		}
	}

运行结果,它会进入一个死循环。

多线程(继承Thread类):

public class T1{

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread t=new MyThread();
        t.start();//开启线程
        while(true){
    	 System.out.println("Main方法在运行");
     }
	}

	
}
class MyThread extends Thread{
		public void run(){
			while(true){
				System.out.println("MyThread类的方法在运行");
			}
		}
	}
在多线程中,main()方法和MyThread类的run()方法却可以同时运行,互不影响,这正是单线程和多线程的区别。

实现Runnable接口创建多线程

     因为Java中只支持单继承,一个类一旦继承了父类就无法再继承Thread类,,为了克服这种弊端,Thread类提供了另外一个构造方法Thread(Runnable target),其中Runnable是一个接口,它只有一个run()方法,当用Runnable时,可以用run()方法,不用Thread类的run()方法。

public class T1{

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread mt=new MyThread();
		Thread t=new Thread(mt);
        t.start();//开启线程
        while(true){
    	 System.out.println("Main方法在运行");
     }
	}

	
}
class MyThread implements Runnable{
		public void run(){
			while(true){
				System.out.println("MyThread类的方法在运行");
			}
		}
	}
直接继承Thread和实现Runnable接口区别:

public class T1{

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	 new MyThread().start();
	 new MyThread().start();
	 new MyThread().start();
	 new MyThread().start();
	}

	
}
class MyThread extends Thread{
		private int mt=100;
		public void run(){
			while(true){
				if(mt>0)
				{
					Thread th=Thread.currentThread();//获取当前线程
					String th_name=th.getName();//获取当前线程的名字
					System.out.println(th_name+"正在发售第"+mt+"张票");
				}
			}
		}
	}


public class T1{

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread my=new MyThread();
	 new Thread(my,"窗口1").start();
	 new Thread(my,"窗口2").start();
	 new Thread(my,"窗口3").start();
	 new Thread(my,"窗口4").start();
	}

	
}
class MyThread implements Runnable{
		private int mt=100;
		public void run(){
			while(true){
				if(mt>0)
				{
					Thread th=Thread.currentThread();//获取当前线程
					String th_name=th.getName();//获取当前线程的名字
					System.out.println(th_name+"正在发售第"+mt+"张票");
				}
			}
		}
	}

Runnable好处:

1、适合多个相同程序代码的线程去处理同一个资源的情况,把线程同代码、数据有效的分离,很好地体现了面向对象的设计思想。

2、可以避免由于java的单继承带来的局限性。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java线程(四):线程中断、线程让步、线程睡眠、线程合并

最近在Review线程专栏,修改了诸多之前描述不够严谨的地方,凡是带有Review标记的文章都是修改过了。本篇文章是插进来的,因为原来没有写,现在来看传统线程描述的不太完整,所以就补上了。理解了线程同...
  • ghsau
  • ghsau
  • 2013年12月26日 20:29
  • 32406

spring 多线程-线程池:

1 类介绍 : 一:  ThreadPoolTaskExecutor是一个spring的线程池技术,查看代码可以看到这样一个字段:     private ThreadPoolExecutor t...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016年04月22日 18:48
  • 1142

IOS 多线程 线程NSThread

线程 NSThread  多线程 线程与进程 进程  是一个活动的程序,一个容器  是系统资源管理的最小单位  切换代价较高   线程 是在进程容器中运行,实际工作的代码 是...
  • u012884714
  • u012884714
  • 2013年12月24日 17:04
  • 3499

线程创建和管理

  • 2018年01月15日 12:03
  • 18KB
  • 下载

线程三个随机数

  • 2017年07月01日 10:37
  • 24KB
  • 下载

一种简单的Linux线程管理接口

  • 2016年04月05日 10:54
  • 3KB
  • 下载

安卓线程 消费者模型

  • 2016年05月19日 19:25
  • 4.29MB
  • 下载

创建线程通讯

  • 2016年04月18日 01:20
  • 8KB
  • 下载

ReAttach线程附加

  • 2017年08月11日 13:50
  • 71KB
  • 下载

进程与线程

  • 2015年02月24日 16:02
  • 336KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程
举报原因:
原因补充:

(最多只允许输入30个字)