`

java多线程二:控制线程方法

 
阅读更多

join线程:
1、Thread线程提供了让一个线程等待另外一个线程执行完成的方法:join方法。当某个正在执行的线程A调用了B线程的join()方法时,那么A线程将会被阻塞,知道B线程执行完成为止才会可能执行。
2、join有三种重载形式:
  join():等待被join的线程执行完成。
  join(long mills):等待被join的线程的最长时间为mills毫秒,如果在mills毫秒内,被join的线程还没有执行完成则不再等待。

package com.yt.manager.thread;

/**
 * join()线程
 * 
 * @author zxf 让一个线程等待另外一个线程执行完成的方法
 */
public class JoinThread extends Thread {

	public JoinThread(String name) {
		super(name);
	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println(getName() + "  " + i);
		}

	}

	public static void main(String[] args) throws InterruptedException {
		for (int i = 0; i < 100; i++) {
			if (i == 20) {
				JoinThread joinThread = new JoinThread("被join的线程");
				joinThread.start();
				// main线程调用了joinThread线程的join()方法, main线程必须等
				// joinThread线程执行结束后才会向下执行。
				joinThread.join();
			}
			System.out.println(Thread.currentThread().getName() + "  " + i);
		}
	}
}

 线程睡眠Sleep:
1、如果我们需要将当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以调用Thread类的静态方法sleep(long millis)。当当前线程调用sleep方法进入阻塞状态后,在其sleep时间内,该线程不会获得任何执行的机会,即使系统中没有其它正在运行的线程,处于sleep的线程
也不会运行,因此sleep方法常用来暂停程序的执行。

package com.yt.manager.thread;
/**
 * 线程睡眠sleep
 * @author zxf
 *
 */
public class SleepThread {

	public static void main(String[] args) throws InterruptedException {
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
			Thread.sleep(5000);
		}
	}
}

 线程让步:
1、它可以让当前正在执行的线程暂停,但不会阻塞线程,它只是将该线程转入就绪状态,yield()方法只是让线程调度器重新调度一次。完全有可能的情况是,当某个线程调用了yield()方法暂停之后,线程调度器又将其调度起来重新执行。实际上当某个线程调用了yield()方法暂停后,只有优先级与当前线程相同,或者优先级比当前线程高的线程才有可能获得执行的机会。

package com.yt.manager.thread;

/**
 * 线程让步
 * 
 * @author zxf
 * 
 */
public class YieldThread extends Thread {

	public YieldThread(String name) {
		super(name);
	}
	
	@Override
	public void run() {
		for(int i=0;i<100;i++){
			System.out.println(getName()+"  "+i);
			//当i==20时,让当前线程做出让步
			if(i==21){
				Thread.yield();
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		YieldThread y1 = new YieldThread("高级");
		//y1.setPriority(Thread.MAX_PRIORITY);
		y1.start();
		
		YieldThread y2 = new YieldThread("低级");
		//y2.setPriority(Thread.MIN_PRIORITY);
		y2.start();

	}

}
分享到:
评论

相关推荐

    Java多线程编程总结

    Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的...

    java多线程编程总结

    Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 ...

    java多线程笔记

    Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    Java多线程示例之线程控制

    Java多线程两个例子,一个是自定义线程池方法实现多线程运行个数的控制,可以解决多线程内存不足的问题。另一个是利用线程通信,读写先关的典型实例

    java 多线程:哲学家思考问题

    java 多线程 哲学家思考问题 java 多线程 哲学家思考问题 ...java 多线程 哲学家思考问题java 多线程 哲学家思考问题java 多线程 哲学家思考问题java 多线程 哲学家思考问题 java 多线程 哲学家思考问题

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

    java 多线程操作数据库

    一个java 多线程操作数据库应用程序!!!

    Java多线程--等待所有子线程执行完的五种方法.docx

    Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...

    java多线程的讲解和实战

    详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。

    java多线程经典案例

    java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

    java的多线程使用方法

    java多线程的使用方法如何使用,怎么使用,使用过程中有什么要注意的

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

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

    java多线程处理大数据

    java多线程处理大数据,可根据配置的线程数,任务去调度处理

    java多线程通信图解

    java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

Global site tag (gtag.js) - Google Analytics