java多线程学习总结之一:基础原理
2012-10-17 16:03
561 查看
自上次博文以来将近一月没写了,中间又有个国庆,期间在coding上有松懈,惭愧啊。现在师兄师姐们都在忙着找工作,巴神“思考人生”附体,想些有的没的。忽然开学到现在一月过去了,总结这一个月学习时间好少!也该收收心开始学习了。暑假中重新看了thinking in java到并发这章的中间部分,java多线程是个难点,所以打算都做些记录并结合51CTO的一个多线程系列。
一:概念
操作系统中进程由PCB(进程控制块)、程序段、数据段组成的进程实体的运行过程(生命周期创建、调度、撤销)。为了减少进程切换的时空开销,引入了线程,把它作为调度和分派的基本单位。
二:java中线程
java中线程的产生有两种方法:
1.继承Thread类,实现public void run(){}方法,start()方法来启动。
2.实现Runnable接口,覆盖public void run(){}方法。
下面举两个分别实现上面两种方法的例子:
直接用Thread类创建实例
实现Runnable接口例子:
使用Executor执行器来管理Thread对象,Executor在java SE5/6中是启动任务的优先方法。Executor在客户端和任务之间提供了一个间接层;与客户端直接执行任务不同,这个中介对象将执行任务。Executor允许管理异步任务的执行,而无须显式地管理线程得生命周期。下面用Executor来代替显式的创建Thread对象。
FixedThreadPool可以自己手动配置线程数。SingleThreadExecutor就是线程数为1的FixedThreadPool,这对于长期存活的任务来说很有用,例如监听进入的套接字连接的任务。
一:概念
操作系统中进程由PCB(进程控制块)、程序段、数据段组成的进程实体的运行过程(生命周期创建、调度、撤销)。为了减少进程切换的时空开销,引入了线程,把它作为调度和分派的基本单位。
二:java中线程
java中线程的产生有两种方法:
1.继承Thread类,实现public void run(){}方法,start()方法来启动。
2.实现Runnable接口,覆盖public void run(){}方法。
下面举两个分别实现上面两种方法的例子:
直接用Thread类创建实例
public class TestThread extends Thread{ private String name; public TestThread(String name){ this.name=name; } public void run(){ for(int i=0;i<5;i++){ try { Thread.sleep(1000); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name+": "+i); } } public static void main(String args[]){ Thread t1 = new TestThread("kate"); Thread t2 = new TestThread("tom"); t1.start(); System.out.println(t1.currentThread()); t2.start(); System.out.println(t2.currentThread()); } }
实现Runnable接口例子:
public class RunnaThread implements Runnable{ private String name; public RunnaThread(String name) { super(); this.name = name; } public void run() { for(int i=0;i<5;i++){ try { Thread.sleep(1000); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name+": "+i); } } }
public class TestRunnable { public static void main(String args[]){ RunnaThread rt1 = new RunnaThread("kate"); RunnaThread rt2 = new RunnaThread("tom"); Thread t1 = new Thread(rt1); Thread t2 = new Thread(rt2); t1.start(); t2.start(); } }
使用Executor执行器来管理Thread对象,Executor在java SE5/6中是启动任务的优先方法。Executor在客户端和任务之间提供了一个间接层;与客户端直接执行任务不同,这个中介对象将执行任务。Executor允许管理异步任务的执行,而无须显式地管理线程得生命周期。下面用Executor来代替显式的创建Thread对象。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CachedThreadPool { public static void main(String args[]){ ExecutorService exec = Executors.newCachedThreadPool(); exec.execute(new RunnaThread("kate")); exec.shutdown(); } }
FixedThreadPool可以自己手动配置线程数。SingleThreadExecutor就是线程数为1的FixedThreadPool,这对于长期存活的任务来说很有用,例如监听进入的套接字连接的任务。
相关文章推荐
- Java基础学习总结(38)——Lombok的使用和原理
- Java基础学习总结(38)——Lombok的使用和原理
- Java基础学习第二十五天——多线程学习总结(二)
- 黑马程序员——java基础——多线程的学习总结
- 黑马程序员学习log第四篇基础知识:JAVA的面向对象之多线程总结
- java基础学习_多线程01_多线程_day23总结
- 黑马程序员 Java学习总结之多线程基础
- 基础知识《四》---Java多线程学习总结
- Java基础学习总结(104)——多线程、并发、工具类相关的面试题
- Java多线程基础学习之线程的创建方式总结
- No_16_0325 Java基础学习第二十四天—多线程学习总结
- java学习笔记14--多线程编程基础1
- java基础学习总结——super关键字
- 黑马程序员 Java学习总结之面向对象和Java基础
- JAVA多线程与并发学习总结
- JAVA基础学习--IO流总结<一>
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- Java基础学习总结(39)——Log4j 1使用教程
- java基础知识学习与总结(一)
- Java基础学习总结(77)——Java枚举再总结