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. XSS分析及预防(转)

    阅读目录 XSS的种类和特点 XSS预防 总结 XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏 ...

  2. XML实例文档

    from: http://www.w3school.com.cn/xpath/xpath_examples.asp XML实例文档 我们将在下面的例子中使用这个 XML 文档: "books ...

  3. 8月30号周五香港接单ING~~化妆品只加10元!!!!!!

    8月30号周五香港接单ING~~化妆品只加10元!!!!!! 8月30号周五香港接单ING~~化妆品只加10元!!!!!!

  4. ios多线程操作(五)—— GCD串行队列与并发队列

          GCD的队列能够分为2大类型,分别为串行队列和并发队列      串行队列(Serial Dispatch Queue):      一次仅仅调度一个任务,队列中的任务一个接着一个地运行( ...

  5. C++ Primer笔记7_STL之关联容器

    关联容器 与顺序容器不同,关联容器的元素是按keyword来訪问和保存的.而顺序容器中的元素是按他们在容器中的位置来顺序保存的. 关联容器最常见的是map.set.multimap.multiset ...

  6. CH BR4思考熊(恒等有理式-逆波兰表达式求值)

    恒等有理式 总时限 10s 内存限制 256MB 出题人 fotile96 提交情况 4/43 描述 给定两个有理式f(X)与g(X),判断他们是否恒等(任意A,如果f(A)与g(A)均有定义,那么f ...

  7. 完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)

    (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一个游戏日文名:タイトル キャッスルファンタジア -エレンシア戦記-リニュー ...

  8. 安装配置gerrit

    Centos 安装配置gerrit 关闭selinux,不然nginx的反向代理会报错connect() to 127.0.0.1:8080 failed (13: Permission denied ...

  9. Cocos2d-x3.1 粒子效果演示样例

    这里把粒子的几种效果粘出来,以便以后使用 原文地址:http://blog.csdn.net/qqmcy/article/details/37511259 // // IntervalLayer.cp ...

  10. windows phone (18) Border元素

    原文:windows phone (18) Border元素 Border类是对某一个对象的周围边框,背景,或者同时绘制两者,首先看一个简单的例子进行分析[作者:神舟龍] xaml文件: <!- ...