线程

原创 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线程.rar

  • 2017年07月26日 10:17
  • 232KB
  • 下载

Android Runnable 运行在那个线程

Runnable 并不一定是新开一个线程,比如下面的调用方法就是运行在UI主线程中的: Handler mHandler=new Handler(); mHandler.post(new R...
  • ghj1976
  • ghj1976
  • 2011年05月06日 09:44
  • 5913

安卓 线程代码实例

  • 2017年07月28日 12:13
  • 9KB
  • 下载

vmmap 观察jvm内存 监控jvm jvm线程

  • 2017年03月20日 14:44
  • 413KB
  • 下载

线程、线程池、并发、同步、异步、锁

线程、线程池、并发、同步、异步、锁先看一个模拟多个线程同时写1000条日志例子:class Program { static void Main(string[] args) { ...

windows线程与内核调度

  • 2015年04月28日 19:34
  • 236KB
  • 下载

线程、预处理ppt

  • 2015年06月10日 17:02
  • 883KB
  • 下载

MFC线程(一):简单介绍

 目录(?)[+] 线程简介线程与函数最简单示例 示例分析 稍复杂点的例子线程休眠与挂起的区别内核对象 进程 内核对象进程与内核对象线程与进程 线程简介 我们...

移动编程之线程

  • 2014年11月27日 19:24
  • 1005KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程
举报原因:
原因补充:

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