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 ARM汇编语言

    简介 ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集. 原生程序与ARM汇编语 ...

  2. windows mysql安装、配置

    一.MySQL的下载: 上图中,我们选择红框部分的社区版本进行下载,MySQL支持许多平台: 我的操作系统是64位的,选择对应版本MSI版下载,弹出login界面, 选择no thanks,just ...

  3. nginx.conf 文中描述的配置文件

    ###############################nginx.conf 件里文说明 #user nobody; # user 主模块指令,指令nginx worker 执行用户和用户组(u ...

  4. C strstr() 函数

    包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(const char *str1, const char *str2); 语法:* strstr( ...

  5. mysql 服务启动报1607 error

    [问题说明] mysql曾经还是好好的,突然就不行了...不知道是否使用了腾讯C盘搬家工具引起的... watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h ...

  6. Deep learning From Image to Sequence

    本文笔记旨在概括地讲deep learning的经典应用.内容太大,分三块. ------------------------------------------------------------- ...

  7. Codeforces 196 C. Paint Tree

    分治.选最左上的点分给根.剩下的极角排序后递归 C. Paint Tree time limit per test 2 seconds memory limit per test 256 megaby ...

  8. 【ASP.NET】验证控件

    在软件开发中,验证输入信息是否正确,这是不可缺少的一项工作.就拿我们做过的机房收费系统来说,在登录的时候,我们须要对username和用户password进行验证.推断是否为空,推断输入字符是否合理等 ...

  9. LaTeX中表格多行显示的最简单设置方法

    这事实上是一个非常easy的问题,可是这两天发现我之前的解决方式太麻烦了.简介一下这样的最简单的方法: 之前设置多行显示的时候,用类似于以下这样的方法进行多行显示: \begin{table} \ne ...

  10. hdu2036 (计算多边形的面积)

    Input 输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1 ...