zoukankan      html  css  js  c++  java
  • 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式

    ------- android培训java培训、期待与您交流! ----------

    多线程:

     

    进程和线程:

    进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。
    线程:就是进程中的一个独立的控制单元。线程在控制着进程的执行。
    一个进程中至少有一个线程。

     

    主线程:

    Java VM  启动的时候会有一个进程java.exe.该进程中至少一个线程负责java程序的执行。而且这个线程运行的代码存在于main方法中。该线程称之为主线程。
    扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的线程。

     

     

    创建线程方式一:继承Thread类

    步骤:
    1.  定义类继承Thread,建立子类对象的同时线程也被创建。

    2.  子类覆盖父类中的run方法,将线程运行的代码存放在run中。目的:将自定义代码存储在run方法。让线程运行。
    3.  通过调用start方法开启线程。该方法有两个作用:启动线程,调用run( )方法。

     

    多线程原理:

    多个线程都获取cpu的执行权。cpu执行到谁,谁就运行。

    明确一点,在某一个时刻,只能有一个程序在运行。(多核除外)

    cpu在做着快速的切换,以达到看上去是同时运行的效果。我们可以形象把多线程的运行行为在互相抢夺cpu的执行权。 
    这就是多线程的一个特性:随机性。谁抢到谁执行,至于执行多长,cpu说的算。 

     
    为什么要覆盖run方法?
    Thread类用于描述线程。该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。也就是说Thread类中的run方法,用于存储线程要运行的代码。

     

    /**
     * 
     * 此程序初步演示多线程的创建问题
     * 		主线程和两个多线程一起运行
     * 1.继承Thread类
     * 2.覆写run()方法
     * 3.start()调用
     *
     */
    public class ThreadDemo 
    {
    	public static void main(String[] args)
    	{
    		//开启两个Demo线程
    		Demo d = new Demo("zhangsan");
    		Demo e = new Demo("lisi");
    		d.start();//启动线程,调用run()方法。
    		e.start();
    		
    		//主线程运行,打印    main.1——1000的数
    		for (int i=1;i<=1000;i++)
    		{
    			System.out.println("main"+"."+i);
    		}
    	}
    }
    
    //定义一个Demo类用于开启多线程,继承Thread
    class Demo extends Thread
    {
    	private String name;
    	Demo(String name)
    	{
    		this.name = name;
    	}
    	//函数功能,打印     名字。1——1000的数
    	public void run()
    	{
    		for (int i=1;i<=1000;i++)
    		{
    			System.out.println(name+"."+i);
    		}
    	}
    }


    经典卖票程序:

     

    /**
     * 
     * 用Thread来初步示例多线程卖票程序
     * 		4个窗口,同时卖100张票
     *
     */
    public class TicDemo 
    {
    	public static void main(String[] args)
    	{
    		//创建4个线程对象
    		Tic t1 = new Tic();
    		Tic t2 = new Tic();
    		Tic t3 = new Tic();
    		Tic t4 = new Tic();
    		
    		//开启4个线程并且运行
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    	}
    }
    
    //声明一个类,继承Thread。
    class Tic extends Thread
    {
    	private static int tic = 100;//继承Thread方法下,共享100张票,要用静态。
    	
    	public void run()
    	{
    		while (tic>0)
    		{
    			System.out.println(Thread.currentThread().getName()+"------"+tic--);
    		}
    	}
    }
    


     

    创建线程方式二:

    实现Runnable接口

    1.  定义类实现Runnable接口,将线程要运行的代码存放在该run方法中。

    2.  子类覆盖接口中的run方法。
    3.  通过Thread类创建线程对象。

    4.  将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。

    5.  调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。 

     

    还是用卖票程序来演示:

     

    /**
     * 
     * 用Runnable来初步示例多线程卖票程序
     * 		4个窗口,同时卖100张票
     *
     */
    public class TicDemo 
    {
    	public static void main(String[] args)
    	{
    		//创建一个线程对象
    		Tic t = new Tic();
    		
    		//创建4个线程,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
    		Thread t1 = new Thread(t);
    		Thread t2 = new Thread(t);
    		Thread t3 = new Thread(t);
    		Thread t4 = new Thread(t);
    			
    		//开启4个线程并且运行
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    	}
    }
    
    //声明一个类,实现Runnable接口
    class Tic implements Runnable
    {
    	private int tic = 100;
    	
    	public void run()
    	{
    		while (tic>0)
    		{
    			System.out.println(Thread.currentThread().getName()+"------"+tic--);
    		}
    	}
    }
    


    ------- android培训java培训、期待与您交流! ----------

     

     

     

  • 相关阅读:
    Class 'ViewCell' has no initializers
    xcode:关于Other Linker Flags
    NSString编码形式是UTF–16
    手写识别方案汇总
    将一个 view 进行截图
    程序员最核心的竞争力是什么?
    sqlite3
    创建NAT 64网络
    Snagit安装步骤
    cnblogs插件jiathis
  • 原文地址:https://www.cnblogs.com/runwind/p/4212197.html
Copyright © 2011-2022 走看看