[NIO]dawn之Task详解

在上篇文章中,我们设置好了开发环境,接下来,我们将在了解了Task以及Buffer之后,再开始了解网络编程。我们首先来看看Task

package zhmt.dawn;

import kilim.Pausable;
import kilim.Scheduler;
import kilim.Task;

//继承kilim.Task
public class HelloWorld extends Task{
	//覆盖execute,注意这里的Pausable异常,这个异常必须抛出,不能捕捉(实际上也不会捕捉到这个异常)
	@Override
	public void execute() throws Pausable, Exception {
		System.out.println("hello world");
	}

	public static void main(String[] args) {
		//创建调度器,并启动
		Scheduler sch = new Scheduler();
		sch.start();

		//new 我们写的Task
		HelloWorld task = new HelloWorld();
		//让task在sch中执行
		task.startOn(sch);

		System.out.println("task started.");
	}
}

注意Pausable这个异常,这个异常不需要catch,必须抛出,如果你的函数调用了一个抛出Pausable异常的函数,那么你的函数也必须抛出Pausable异常。为什么不需要catch呢?因为这个异常只是起到一个标记的作用,标记当前函数是可以暂停的(也就是指协程的挂起、恢复)。如果一个函数是可暂停的,那么所有调用它的函数也都是可暂停的,因此他们也都需要标记自己是Pausable的。那么这个标记是什么时候起作用呢?是在运行weaver.xml的时候,这时,织入程序会扫描所有方法,如果标记了Pausable,就会插入挂起、恢复相关的代码。所以这个标记是编译时用的,真正运行的时候没什么用,运行的时候不会抛出这个异常,我们也捕捉不到。

啰嗦了一堆,代码伺候:

package zhmt.dawn;

import kilim.Pausable;
import kilim.Scheduler;
import kilim.Task;

public class SleepTest extends Task{
	//覆盖execute,注意这里的Pausable异常,这个异常必须抛出,不能捕捉(实际上也不会捕捉到这个异常)
	@Override
	public void execute() throws Pausable, Exception {
		System.out.println("I am tired.");
		sleepOneSecond();
		//1秒后打印
		System.out.println("I am refreshed.");
	}

	//sleepOneSecond调用了sleep,而sleep是可暂停的,所以,sleepOneSecond抛出了Pausable异常
	private void sleepOneSecond() throws Pausable{
		sleep(1000);
	}

	public static void main(String[] args) {
		//创建调度器,并启动
		Scheduler sch = new Scheduler();
		sch.start();

		//new 我们写的Task
		SleepTest task = new SleepTest();
		//让task在sch中执行
		task.startOn(sch);

	}
}

你可能会想如果sleepOneSecond捕捉了Pausable异常,会怎样呢?你可以试试,熟悉一下这个错误场景吧,它是我们的老朋友的,以后会常遇到。

注意:构造函数

未完,待更新

时间: 2024-10-14 11:19:24

[NIO]dawn之Task详解的相关文章

Android Gradle 自定义Task 详解

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 一:Gradle 是什么 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置.面向Java应用为主. 当前其支持的语言限于Java.Groovy.Kotlin和Scala,计划未来将支持更多的语言.基

[NIO]dawn之Task具体解释

在上篇文章中,我们设置好了开发环境,接下来.我们将在了解了Task以及Buffer之后,再開始了解网络编程.我们首先来看看Task task简单介绍 package zhmt.dawn; import kilim.Pausable; import kilim.Scheduler; import kilim.Task; //继承kilim.Task public class HelloWorld extends Task{ //覆盖execute,注意这里的Pausable异常,这个异常必须抛出.

Activity中Task详解

来源:http://blog.csdn.net/liuhe688/article/details/6761337 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下. task是一组Activity实例组成的栈: task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity.默认情况下,一个Activity启动另一

Java NIO中的Buffer 详解

Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤: 写入数据到Buffer    调用flip()方法    从Buffer中读取数据    调用clear()方法或者compact()方法 当向buffer写入数据时,

strom之Worker、executor、task详解

Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作: 1. Worker(进程) 2. Executor(线程) 3. Task 下图简要描述了这3者之间的关系: 上图和下面这张图一样 看看官网的对这部分的讲解 Example of a running topology The following illustration shows how a simple topology would look like in operation. The t

Java输入输出流(NIO)-----文件类File详解

   1.java.io.File类简介 凡是与输入.输出相关的类.接口等都定义在java.io包下 File是一个类,可以有构造器创建其对象.此对象对应着一个文件(.txt .avi .doc .ppt .mp3 .jpg)或文件目录 File类对象是与平台无关的 File中的方法,仅涉及到如何创建.删除.重命名等等.只要涉及文件内容的,File是无能为力的,必须由io流来完成 File类的对象常作为io流的具体类的构造器的形参    2.createNewFile()  delete()  

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introduction/ netty是基于NIO实现的异步事件驱动的网络编程框架,学完NIO以后,应该看看netty的实现,netty框架涉及的内容特别多,这里只介绍netty的基本使用和实现原理,更多扩展的内容将在以后推出. 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎

Java NIO中的Glob模式详解

Java NIO中的Glob模式详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.什么是Glob? 在编程设计中,Glob是一种模式,它使用通配符来指定文件名.例如:.java就是一个简单的Glob,它指定了所有扩展名为"java"的文件.Glob模式中广泛使用了两个通配符""和"?".其中星号表示"任意的字符或字符组成字符串",而问号则表示"任意单个字符&quo

TaskScheduler内幕天机:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解

TaskSchedulerBackend与SchedulerBackend FIFO与FAIR两种调度模式 Task数据本地性资源的分配 一.TaskScheduler运行过程(Spark-shell角度) 1.启动Spark-shell 当我们spark-shell本身的时候命令终端返回来的主要是ClientEndpoint和SparkDeploySchedulerBakcend.这是因为此时还没有任何应用程序Job的触发,这是启动Application本身而已,所以主要就是实例化SparkC