zoukankan      html  css  js  c++  java
  • 多线程详细解析(一) 创建线程

    多线程详细解析(一)

    1、何为线程

    在JAVA中,正在执行程序的主体即为线程。

    2、单线程程序

    只有一个线程有操作的程序为单线程程序(严格来说,有些线程不是在JAVA系统上面跑的,如垃圾收集使用的线程,GUI使用的线程等)

    3、多线程程序

    由一个以上的线程组成的程序叫做多线程程序。

    Java中开启新的线程的方法

    1、通过继承THread类。

    package my.study.threadStudy.demo01;
    
    public class MyThread extends Thread{
    
    	@Override
    	public void run() {
    		for(int i= 0 ;i<1000;i++){
    			System.out.print("hello!");
    		}
    	}
    }
    通过集成Thread类,并覆盖其中的run()方法,即可创建一个线程实例,但是线程并未启用。

    我们稍微修改一下MyThread类。

    package my.study.threadStudy.demo01;
    
    public class MyThread extends Thread{
    	
    	private String name;
    	
    	
    	public MyThread(String name) {
    		super();
    		this.name = name;
    	}
    
    
    	@Override
    	public void run() {
    		for(int i=0 ;i<1000;i++){
    			System.out.print(name);
    		}
    	}
    }
    
    这样我们在创建线程实例的时候。可以直接传一个参数,并且打印该参数。


    现在通过一个main方法来启用该线程,Tread有一个内置的star()方法,只需调用该方法即可启用线程。

    public static void main(String[] args) {
    		Thread t1=new MyThread("Hello");
    		Thread t2=new MyThread("World!");
    		t1.start();
    		t2.start();
    	}

    打印结果为  Hello Hello Hello...World! Wordl! World!....  Hello Hello Hello...World! Wordl! 

    也就是说打印出来的结果是交替出现的。而并非所有的t1全部执行完成后,才执行t2.说明两个线程是同时启用的。

    而当两个线程都启动后,主线程并没有马上停止,而是等到两个线程全部执行完毕后,主线程才关闭。说明当所有线程都结束后

    程序才会结束。


    注意:只有在调用start()方法时,线程才开始执行,而非run()方法,你也可以调用run()方法,但是这样线程并不会启用。


    若计算机只有一个中央处理器,连个线程的操作情况如下

    执行t1-->执行t2-->执行t1...

    而并非是两个线程同时执行。事实上,程序的运行时想这样不断的切换有操作的线程。而这种操作就成为并发。


    利用Runnable接口实现多线程

    MyRunnable类实现了Runnable接口,并实现了run()方法。

    public class MyRunnable implements Runnable{
    	
    	private String name;
    	
    	public MyRunnable(String name) {
    		super();
    		this.name = name;
    	}
    	@Override
    	public void run() {
    		for(int i=0;i<1000;i++){
    			System.out.print(name);
    		}
    	}
    }
    run()方法里即该线程运行的主体。

    启用线程的方法如下

    Thread t1=new Thread(new MyRunnable("Hello"));
    		Thread t2=new Thread(new MyRunnable("World!"));
    		t1.start();
    		t2.start();

    Thread有个构造函数,可以将Runnable作为参数传入。

    启用线程的方法仍然是.start()方法。


    输出结果同利用集成Thread类时的输出结果。

    线程的暂时停止
    Thread.sleep();

    sleep()方法时Thread中内置方法,该方法可以使该线程暂时停止。

    Thread.sleep(1000)
    
    可以使该线程暂时停止大约1秒(1000毫秒)的时间。

     

  • 相关阅读:
    《mysql必知必会》学习_第23章_20180809
    禁止电脑自动乱装流氓软件
    网络地址转换技术NAT
    闲置手机作电脑无线音箱
    TransMac工具制作MacOS启动U盘
    制作MacOS启动U盘
    解决centos7启动后出现Warning: dracut-initqueue timeout‘ at startup进入emergency mode的问题
    思科 锐捷命令行简介
    VRRP 虚拟网关冗余协议
    STP 生成树协议
  • 原文地址:https://www.cnblogs.com/xsyfl/p/6842525.html
Copyright © 2011-2022 走看看