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!),
*/

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

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

    java 线程  原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.Time ...

  2. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

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

    在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 ...

  4. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  5. java 又一次抛出异常 相关处理结果演示样例代码

    java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...

  6. java I/O进程控制,重定向 演示样例代码

    java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...

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

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  8. [Python] SQLBuilder 演示样例代码

    用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附 ...

  9. Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...

随机推荐

  1. Android 异步链式调用设计

    本文讨论一下异步链式调用的设计与实现. 考虑如下情况: 情况1: 访问网络(或其他耗时的事情).通常的做法是: 1.显示一个ProgressDialog对话框,提示用户. 2.启动工作线程来执行耗时操 ...

  2. jquery实现菜单功能(单击展开或者关闭)-一般应用于后台

    <!doctype html> <html> <head> <meta charset="gb2312"> <title> ...

  3. 在java代码中进行px与dip(dp)、px与sp单位值的转换

        其实都是以前保存的代码,最近发现自己的资料库很混乱,索性都整理成博客,方便以后自己要用的时候快速找到. DisplayUtil.java /** * 单位转换工具 * * @author ca ...

  4. RVDS 3.1 下载地址及破解方法

    RealView Development Suite 3.1  RVDS 3.1下载地址:https://silver.arm.com/download/Development_Tools/RVDS/ ...

  5. 二、第一个ExtJS程序:helloExtJS

    开发前的准备 下载并解压ExtJS包后,能够得到下图的文件文件夹结构: 在实际开发过程中并不须要全部的文件和文件夹,所需的包括例如以下文件夹就可以: 若使用eclipse进行开发,仅仅需将上述文件拷贝 ...

  6. hdu3966(树链剖分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:一颗树上,每个点有权值,定义三种操作: 1)I操作表示从a到b节点之间的节点都加上一个值 ...

  7. hdu2412(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2412 题意:给定一棵关系树 , 从中选择一些点 , 使这些点均不存在亲子关系 , 最多能取多少个点 , ...

  8. 关于IE打印预览内容显示不全的问题解决

    眼下在调整一个页面打印功能的时候,发现多行文本框TextArea在页面显示的时候,多行文本能够正常显示,可是在打印页面的时候.部分内容就被遮挡住了, 苦思冥想不得其解,后来还是请教了美工. 首先查了下 ...

  9. BNUOJ34973Liserious战队

    Liserious战队 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class ...

  10. Instruments的使用 逻辑查错,内存泄漏分析等工具集

    原创文章,转载请注明 XCode 开发后期,要对代码进行改进和优化,查内存泄漏是其中一项重要工作,今天下午偷了点时间,把前段时间的代码稍微整理了一下,顺带用了下这个工具,还真发现了些问题.这里记录一下 ...