java 线程、线程池基本应用演示样例代码回想

package org.rui.thread;
/**
 * 定义任务
 *
 * @author lenovo
 *
 */
public class LiftOff implements Runnable {

	protected int countDown=10;
	private static int taskCount=0;
	private final int id=taskCount++;

	public LiftOff(){}
	public LiftOff(int countDown)
	{
		this.countDown=countDown;
	}

	public String status(){
		return "#"+id+"("
				+ (countDown>0?countDown:"liftoff!")+"),";
	}
	@Override
	public void run() {
		while(countDown-->0)
		{
			System.out.print(status());
			//机制的一部分,能够将cpu从一个线程转移给还有一个线程 的一种建议
			//它在声明: 我已经运行完生命周期中最重要的部分了,此刻正是切换给其它任务运行一段时间的大好时机
			//为全然是先择性的。
			Thread.yield();//线程调度
		}

	}

}
package org.rui.thread;
/**
 * Run  不是单独的线程驱动。它是在main中直接调用的  这里仍旧使用线程。即总是分配给main的那个线程
 * @author lenovo
 *
 */
public class MainThread {
	public static void main(String[] args) {
		LiftOff launch=new LiftOff();
		launch.run();
	}

}
/**
 *output:
 #0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(liftoff!),
 */
package org.rui.thread;
/**
 * thread 类驱动LiftOff
 * @author lenovo
 *
 */
public class BasicThreads {
	public static void main(String[] args) {
		Thread t=new Thread(new LiftOff());
		t.start();
		System.out.println("waiting for liftoff()");
	}

}
/**output:
waiting for liftoff()
#0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(liftoff!),
*/
package org.rui.thread;
/**
 * 很多其它的线程 驱动LiftOff
 * @author lenovo
 *
 */
public class MoreBasicThreads {
	public static void main(String[] args) {
		for(int i=0;i<5;i++)
		{
			Thread t=new Thread(new LiftOff());
			t.start();
			System.out.println("waiting for liftoff()");
		}

	}

}
/**output:
waiting for liftoff()
#0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(liftoff!),waiting for liftoff()
waiting for liftoff()
#2(9),#2(8),#2(7),#2(6),#2(5),#2(4),#2(3),#2(2),#2(1),#2(liftoff!),waiting for liftoff()
waiting for liftoff()
#4(9),#1(9),#3(9),#4(8),#3(8),#4(7),#3(7),#4(6),#3(6),#4(5),#3(5),#4(4),#3(4),#4(3),#3(3),#4(2),#3(2),#4(1),#3(1),#4(liftoff!),#3(liftoff!),#1(8),#1(7),#1(6),#1(5),#1(4),#1(3),#1(2),#1(1),#1(liftoff!),
*/
package org.rui.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 使用executor
 * @author lenovo
 *
 */
public class CachedThreadPool {
	public static void main(String[] args) {
		//创建并返回设置有经常使用配置字符串的 ExecutorService 的方法。
		/**
		 * newCachedThreadPool
		 * 创建一个可依据须要创建新线程的线程池。可是在曾经构造的线程可用时将重用它们。
		 */
		ExecutorService exec=Executors.newCachedThreadPool();

		for(int i=0;i<5;i++){
			exec.execute(new LiftOff());
		}
		//启动一次顺序关闭,运行曾经提交的任务。但不接受新任务。

exec.shutdown();//防止新的任务被提交到executor

	}

}
/**
 * OUTPUT:
 #0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(liftoff!),
 #1(9),#3(9),#1(8),#3(8),#1(7),#3(7),#1(6),#3(6),#1(5),#3(5),#1(4),
 #3(4),#1(3),#3(3),#1(2),#3(2),#1(1),#3(1),#1(liftoff!),#3(liftoff!),
 #2(9),#2(8),#2(7),#2(6),#2(5),#2(4),#2(3),#2(2),
 #2(1),#2(liftoff!),#4(9),#4(8),#4(7),#4(6),#4(5),#4(4),#4(3),#4(2),#4(1),#4(liftoff!),
 */
package org.rui.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 使用executor
 *
 * 在不论什么线程池中 现有线程在可能的情况下,都会自己主动复用
 * @author lenovo
 *
 */
public class FixedThreadPool {
	public static void main(String[] args) {

		/**
		 * 创建一个可重用固定线程数的线程池,以共享的无界队列方式来执行这些线程。
		 */
		ExecutorService exec=Executors.newFixedThreadPool(5);
		for(int i=0;i<5;i++){
			exec.execute(new LiftOff());
		}
		exec.shutdown();
	}

}
/**
 * OUTPUT:
 #0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(liftoff!),
 #1(9),#3(9),#1(8),#3(8),#1(7),#3(7),#1(6),#3(6),#1(5),#3(5),#1(4),
 #3(4),#1(3),#3(3),#1(2),#3(2),#1(1),#3(1),#1(liftoff!),#3(liftoff!),
 #2(9),#2(8),#2(7),#2(6),#2(5),#2(4),#2(3),#2(2),
 #2(1),#2(liftoff!),#4(9),#4(8),#4(7),#4(6),#4(5),#4(4),#4(3),#4(2),#4(1),#4(liftoff!),
 */
package org.rui.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 使用executor
 *
 * 作为别一个演示样例 如果你有大量的线程 那它们执行的任务将使用文件系统。
 * 你能够用single。

。

。 来执行这些线程。以确保随意时刻在不论什么线程中都仅仅有唯一的任务执行。
 * 这样的方式 你不须要在共享资源上处理同步。

。

。

。
 * @author lenovo
 *
 */
public class SingleThreadPool {
	public static void main(String[] args) {

		/**
		 * 创建一个使用单个 worker 线程的 Executor,以无界队列方式来执行该线程
		 */
		ExecutorService exec=Executors.newSingleThreadExecutor();
		for(int i=0;i<5;i++){
			exec.execute(new LiftOff());
		}
		exec.shutdown();
	}

}
/**
 * OUTPUT:
 #0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(liftoff!),
 #1(9),#3(9),#1(8),#3(8),#1(7),#3(7),#1(6),#3(6),#1(5),#3(5),#1(4),
 #3(4),#1(3),#3(3),#1(2),#3(2),#1(1),#3(1),#1(liftoff!),#3(liftoff!),
 #2(9),#2(8),#2(7),#2(6),#2(5),#2(4),#2(3),#2(2),
 #2(1),#2(liftoff!),#4(9),#4(8),#4(7),#4(6),#4(5),#4(4),#4(3),#4(2),#4(1),#4(liftoff!),
 */
时间: 2024-10-01 12:07:02

java 线程、线程池基本应用演示样例代码回想的相关文章

java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4

java 线程  原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类

ArcSDE SDK For Java二次开发介绍、演示样例

在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 可是查询时会发现这个ST_GEOMETRY字段会在结果中出现个多个子的字段,对于arcgis地理知识了解甚少,不知道单独查询一个坐标怎么弄了,有些朋友说须要配置监听文件. 无论怎么说,至少參考了一个大牛的文章,http://blog.csdn.net/linghe301/article/detail

10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1)零配置,无需安装和配置: (2)储存在单一磁盘文件里的一个完整的数据库. (3)数据库文件能够在不同字节顺序的机器间自由共享: (4)支持数据大小至2TB: (5)足够小.全部源码大致3万行C代码.250KB: (6)比眼下流行的大多数数据库的操作要快. (7)开源. 2.Sqlite 基本操作语句

[Python] SQLBuilder 演示样例代码

用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附上代码: 演示样例代码(一): class SQLDirector: @classmethod def buildSQL(cls, builder): sql = "" sql += builder.getCommand() sql += builder.getTable() sql +=

C编程规范, 演示样例代码。

/*************************************************************** *Copyright (c) 2014,TianYuan *All rights reserved. * *文件名: standard.h *文件标识: 编程规范演示样例代码 * *当前版本号:V1.0 *作者:wuyq *完毕日期:20140709 * *改动记录1: //改动历史记录.包含改动日期.版本号号.改动人及改动内容等 *改动日期 版本号号 改动人 改动内

java 状态模式 解说演示样例代码

package org.rui.pattern; import junit.framework.*; /** * 为了使同一个方法调用能够产生不同的行为,State 模式在代理(surrogate)的 * 生命周期内切换它所相应的实现(implementation).当你发现,在决定怎样实现任 对象去耦(Object decoupling) * http://blog.csdn.net/lxwde 28 何一个方法之前都必须作非常多測试的情况下,这是一种优化实现代码的方法.比如, * 童话故事青

Java正則表達式演示样例

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // 按指定模式在字符串查找 String line = "This order was placed for QT3000! OK? "; String pattern = "(.*)(\\d+)(.*)&qu

1000个经常使用的Python库和演示样例代码

以下是programcreek.com通过分析大量开源码,提取出的最经常使用的python库. 1. sys    (4627) 2. os    (4088) 3. re    (3563) 4. time    (3195) 5. datetime    (2214) 6. random    (2135) 7. unittest    (1928) 8. logging    (1909) 9. urllib    (1884) 10. subprocess    (1756) 11. s

Matlab遗传算法优化问题求解的演示样例代码

代码例如以下: function m_main() clear clc Max_gen = 100;% 执行代数 pop_size = 100;%种群大小 chromsome = 10;%染色体的长度 pc = 0.9;%交叉概率 pm = 0.25;%变异概率 gen = 0;%统计代数 %初始化 init = 40*rand(pop_size, chromsome)-20; pop = init; fit = obj_fitness(pop); [max_fit, index_max] =