`

Java多线程启动方式

 
阅读更多
1.Java新建线程的方式:实现Runnable接口,或者继承Thread类。简单代码示例如下:
  实现Runnable接口
public class ThreadByRunnable implements Runnable {
	private String name;

	public ThreadByRunnable(String name) {
		this.name = name;
	}

	public void run() {
		for (int i = 0; i < 5; i++) {
			for (long k = 0; k < 100000000; k++)
				;
			System.out.println(name + ": " + i);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ThreadByRunnable ds1 = new ThreadByRunnable("阿三");
		ThreadByRunnable ds2 = new ThreadByRunnable("李四");

		Thread t1 = new Thread(ds1);
		Thread t2 = new Thread(ds2);

		t1.start();
		t2.start();
	}
}

  继承Thread方法
public class ThreadByThread extends Thread {
	public ThreadByThread(String name) {
		super(name);
	}

	public void run() {
		for (int i = 0; i < 5; i++) {
			for (long k = 0; k < 100000000; k++)
				;
			System.out.println(this.getName() + " :" + i);
		}
	}

	public static void main(String[] args) {
		Thread t1 = new ThreadByThread("阿三");
		Thread t2 = new ThreadByThread("李四");
		t1.start();
		t2.start();
	}
}


2.线程的状态
    线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。

    对于如何干预线程的运行,最直观的方式如下(不包括在其它地方给对象加锁,从而阻碍线程的运行)。
    1).睡眠:Thread.sleep(long millis)和Thread.sleep(long millis, int nanos)静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。
    线程睡眠的原因:线程执行太快,或者需要强制进入下一轮,因为Java规范不保证合理的轮换。
        try {
            Thread.sleep(123);
        } catch (InterruptedException e) {
            e.printStackTrace();  
        }

    2)Thread.yield()方法
      Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。
yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。
      因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
      结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。
    3)join()方法
      Thread的非静态方法join()让一个线程B“加入”到另外一个线程A的尾部。在A执行完毕之前,B不能工作。例如:
        Thread t = new MyThread();
       t.start();
       t.join();
示例代码:
public class JoinThread extends Thread{
     public JoinThread(String name){
           super(name);
     }
     
     public void run(){
           for(int i=0; i<10; i++){
                 for(long k=0; k<100000000; k++){}

                 System.out.println(this.getName() + ": " + i);
           }
     }
     
     public static void main(String[] args){
           Thread t1 = new JoinThread("AA AA");
           t1.start();
           try{
                 t1.join(1000);                 //Join在这里~
           } catch(InterruptedException e) {
                 e.printStackTrace();
           }      
           System.out.println("over");
     }
}

      另外,join()方法还有带超时限制的重载版本。 例如t.join(5000);则让线程等待5000毫秒,如果超过这个时间,则停止等待,变为可运行状态。
  • 大小: 7.6 KB
分享到:
评论

相关推荐

    多线程启动.java多线程启动.java多线程启动.java

    多线程启动.java多线程启动.java多线程启动.java多线程启动.java

    Java多线程编程总结

    Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程...

    java多线程编程总结

    详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...

    java多线程笔记

    Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的调度-让步 19 Java线程:线程的...

    Java多线程调用BlockingDeque跑批量数据的例子

    一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...

    java多线程URL方式下载单个大文件

    Java代码,根据URL方式下载单个文件或者图片,根据文件大小进行分批启动多线程下载!

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    java多线程示例

    Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并...

    java 多线程设计模式 进程详解

    《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...

    多线程 启动控制台 精确定时 WaitForSingleObject

    多线程 启动控制台 精确定时 WaitForSingleObject

    java多线程设计模式详解(PDF及源码)

    单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...

    java多线程代理IP池

    多线程代理IP池,一直看到有关这方面的技术,最近实现了一个。简单的来说,启动后,会一直定时的获取代理ip,并自动检测代理ip的活跃度。运用多线程的技术,在极短的时间内获取大量的ip进行筛选。架构也比较清楚,...

    java多线程编程教程

    进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块...这部分内容大大增强了Java多线程编程的能力,通过使用Java5线程新特征的API,可以很容易的做出复杂的多线程程序。与其他语言相比,已经是相当强悍了

    java多线程并发演示

    实现多线程的并发执行,能演示操作系统的时间转轮调度算法对多线程程序执行的影响效果,能控制一个或多个线程的执行情况。

    Java多线程贪吃蛇-snake完整源代码.rar

    Java多线程贪吃蛇-snake完整源代码,任何情况下处理的按键,按键导致重新启动游戏,  // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半  int initArrayLength = maxX &gt; 20 ? 10 : maxX / 2; ...

    了解多线程,java多线程讲解

    主要是针对java多线程,详细描述相关的内容。 了解多线程 了解JAVA线程运行机制 线程的组成部分 线程的创建和启动

    java写的多线程下载程序源码

    利用java多线程以及网络编程知识写的一个下载程序源码,程序根据被下载文件的大小启动相应个数的线程对其进行下载。

    Java Socket实例(服务器多线程)

    Java Socket实例(服务器多线程) 之前3积分下的代码,代码不错就是太贵,现本人分享出来

Global site tag (gtag.js) - Google Analytics