DB2里面如何进行快速分页?就像mysql的limit之类的
2014-04-11 11:00
459 查看
一、什么是线程
线程是指令的执行路径。在Java语言中,线程无处不在,每一个计算机程序最少都有一个线程。例如下面的程序
在java语言中,上面这段程序由一个所谓的main线程来执行的,其开始点是main方法里面的第一条语句(使用Eclipse Debug功能,可以清晰的从Debug Tab窗口中看到这个线程),这个线程和其他线程的不同点在于,其执行开始点是main方法中的第一条指令;而其他的线程执行开始点是run方法中的第一条指令。在Java应用中,所有的Java应用的起点都是main这个单线程,对于控制台的Java应用自是不必说了。对于Applet,J2EE呢?也是如此,只是你的code是作为plugin插入那些框架中执行,受那些容器,框架的管理,而那些框架也是从main开始的。
对于Java线程而言:
每个线程都有一块儿自留地,用以存放local的变量
整个JVM Heap中的对象为线程所共享,线程可以透明的访问他们。
二、线程的创建
在JVM中,Thread类的一个instance就代表一个线程,每一个线程都有这样一个相关的对象。这是创建Thread Instance是创建线程的唯一方式。只有通过呼叫这个Instance的start方法,才可以启动一个线程。Runnable接口只是定义了任务接口,其实现是一个任务的指令序列集合。这个任务要变成一个线程运行起来,则必须作为参数传入到Thread的构造函数中,以创建Thread类的一个instance。
看上面的例子:
一共有3个线程,一个main线程,是由JVM创建,其执行开始点是main方法中的第一条语句,在main线程中又创建了2个线程,其中一个继承自Thread,另一个实现Runnable接口,外包Thread的Object的外套。
Java语言中,没有父线程,子线程之说,线程一旦创建,就开始独立的,和原线程并发执行。具体的由哪个线程会占用CPU,执行代码,由JVM负责调度
三、线程的生命周期
上图为一个Thread的状态变迁图,需要说明的一点是RUNNING只是为了说明问题的方便性,而虚构的一个Thread的状态,在JVM中一个Thread只有如下几种状态。
线程是指令的执行路径。在Java语言中,线程无处不在,每一个计算机程序最少都有一个线程。例如下面的程序
package study.thread.chapter2.example1; /** * calculate the factorial of a number which is inputed from standard console * */ public class Factorial { public static void main(String[] args) { int n = Integer.parseInt(args[0]); System.out.print(n + "! is "); int fact = 1; while (n > 1) { fact *= n--; } System.out.println(fact); // the result of n! System.out.println(Thread.currentThread().getName()); // } }
在java语言中,上面这段程序由一个所谓的main线程来执行的,其开始点是main方法里面的第一条语句(使用Eclipse Debug功能,可以清晰的从Debug Tab窗口中看到这个线程),这个线程和其他线程的不同点在于,其执行开始点是main方法中的第一条指令;而其他的线程执行开始点是run方法中的第一条指令。在Java应用中,所有的Java应用的起点都是main这个单线程,对于控制台的Java应用自是不必说了。对于Applet,J2EE呢?也是如此,只是你的code是作为plugin插入那些框架中执行,受那些容器,框架的管理,而那些框架也是从main开始的。
对于Java线程而言:
每个线程都有一块儿自留地,用以存放local的变量
整个JVM Heap中的对象为线程所共享,线程可以透明的访问他们。
二、线程的创建
在JVM中,Thread类的一个instance就代表一个线程,每一个线程都有这样一个相关的对象。这是创建Thread Instance是创建线程的唯一方式。只有通过呼叫这个Instance的start方法,才可以启动一个线程。Runnable接口只是定义了任务接口,其实现是一个任务的指令序列集合。这个任务要变成一个线程运行起来,则必须作为参数传入到Thread的构造函数中,以创建Thread类的一个instance。
public class CreateThread { //JVM创建main线程 public static void main(String[] args) { //创建Thread的instance,来代表创建一个线程 Thread ext = new ExtendsThread(); //创建Thread的instance,来代表创建一个线程 Thread imp = new Thread(new RunnableImpl()); //启动线程 ext.start(); imp.start(); } //继承Thread来定义任务 public static class ExtendsThread extends Thread{ @Override public void run(){ System.out.println("I'm ExtendsThread"); } } //实现Runnable接口来定义任务 public static class RunnableImpl implements Runnable { @Override public void run() { System.out.println("I'm RunableImpl"); } } }
看上面的例子:
一共有3个线程,一个main线程,是由JVM创建,其执行开始点是main方法中的第一条语句,在main线程中又创建了2个线程,其中一个继承自Thread,另一个实现Runnable接口,外包Thread的Object的外套。
Java语言中,没有父线程,子线程之说,线程一旦创建,就开始独立的,和原线程并发执行。具体的由哪个线程会占用CPU,执行代码,由JVM负责调度
三、线程的生命周期
上图为一个Thread的状态变迁图,需要说明的一点是RUNNING只是为了说明问题的方便性,而虚构的一个Thread的状态,在JVM中一个Thread只有如下几种状态。
NEW | 刚刚new一个Thread的实例 |
RUNNABLE | 处于NEW状态Thread的实例,通过start()来启动线程。这是线程就处于可运行态,他随时都有可能被JVM调度到CPU去执行其中的代码 |
BLOCKED | 正在执行的线程,如果遇到等待monitor lock,就进入BLOCKED状态 |
WAITING | 正在执行的线程,入到如下的指令,就进入该状态: Object.wait() Thread.join() LockSupport.park() |
TIMED_WAITING | 正在执行的线程,入到如下的指令,就进入该状态: Thread.sleep(long) Object.wait(long) Thread.join(long) LockSupport.parkNanos LockSupport.parkUntil |
TERMINATED | 线程执行完成 |
相关文章推荐
- DB2里面如何进行快速分页?就像mysql的limit之类的
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!
- (纯属转贴,没有测试过)如何优化Mysql千万级快速分页,limit优化快速分页
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!
- mysql、sqlserver、DB2、oracle如何分页
- 在MySQL中使用LIMIT进行分页的方法
- MySQL中使用LIMIT进行分页的方法
- 使用hibernate代替mysql中limit进行分页
- 【转】 Mysql limit 优化,百万至千万级快速分页,--复合索引的引用并应用于轻量级框架
- mysql分页查询中如何利用group by进行去重操作
- Mysql limit 优化,百万至千万级快速分页,--复合索
- 使用mysql的limit进行分页时出现重复问题
- jsp+mysql分页技巧:巧用limit 进行分页查询
- Mysql limit 优化,百万至千万级快速分页,--复合索
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框
- mysql limit 优化 百万至千万级快速分页 –复合索引的引用并应用于轻量级框架