没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Java 多线程编程线程:大总结
Java 线程是 Java 语言中一个非常重要的部分,Java5 之前,多线程的语言支持还是比较弱的,
内容也较少,写一个复杂的多线程程序是相当有挑战性的。
在 Java5 以后,Java 对多线程做了很多扩展,扩展部分称之为并发包。这部分内容大大增强
了 Java 多线程编程的能力,通过使用 Java5 线程新特征的 API,可以很容易的做出复杂的多
线程程序。与其他语言相比,已经是相当强悍了。
通过十多篇博文,将 Java 多线程的方方面面过了一遍,对我来说是一个学习和提高的过程,也
为 Java 线程系列博文能给后来的学习者带来便利。
知识点都过了一遍,要总结起来感觉很困难,毕竟 Java 线程是一个庞大的话题,不知道从何说
起,如果泛泛而谈,那总结还有什么意义呢,再次,将前面的博文串联起来,按照先后顺序加上
链接,以方便浏览也最好的首尾。
下面是 Java 线程系列博文的一个编目:
Java线程:概念与原理
Java线程:创建与启动
Java线程:线程栈模型与线程的变量
Java线程:线程状态的转换
Java线程:线程的同步与锁
Java线程:线程的交互
Java线程:线程的调度-休眠
Java线程:线程的调度-优先级
Java线程:线程的调度-让步
Java线程:线程的调度-合并
Java线程:线程的调度-守护线程
Java线程:线程的同步-同步方法
Java线程:线程的同步-同步块
Java线程:并发协作-生产者消费者模型
Java线程
:并发协作-死锁
Java线程:volatile关键字
Java线程:新特征-线程池
Java线程:新特征-有返回值的线程
Java线程:新特征-锁(上)
Java线程:新特征-锁(下)
Java线程:新特征-信号量
Java线程:新特征-阻塞队列
Java线程:新特征-阻塞栈
Java线程:新特征-条件变量
Java线程:新特征-原子量
Java线程:新特征-障碍器
Java线程:大总结
Java 线程:概念与原理
一、操作系统中线程和进程的概念
现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以
启动多个线程。比如在 Windows 系统中,一个运行的 exe 就是一个进程。
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如 java.exe 进程中可以运
行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。
“同时”执行是人的感觉,在线程之间实际上轮换执行。
二、Java 中的线程
在 Java 中,“线程”指两件不同的事情:
1、java.lang.Thread 类的一个实例;
2、线程的执行。
使用 java.lang.Thread 类或者 java.lang.Runnable 接口编写代码来定义、实例化和启动新
线程。
一个 Thread 类实例只是一个对象,像 Java 中的任何其他对象一样,具有变量和方法,生死于
堆上。
Java 中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。
一个 Java应用总是从 main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。
一旦创建一个新的线程,就产生一个新的调用栈。
线程总体分两类:用户线程和守候线程。
当所有用户线程执行完毕的时候,JVM 自动关闭。但是守候线程却不独立于 JVM,守候线程一
般是由操作系统或者用户自己创建的。
Java 线程:创建与启动
一、定义线程
1、扩展 java.lang.Thread 类。
此类中有个 run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;
否则,该方法不执行任何操作并返回。
Thread 的子类应该重写该方法。
2、实现 java.lang.Runnable 接口。
void run()
使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用
对象的
run 方法。
方法
run 的常规协定是,它可能执行任何所需的操作。
二、实例化线程
1、如果是扩展 java.lang.Thread 类的线程,则直接 new 即可。
2、如果是实现了 java.lang.Runnable 接口的类,则用 Thread 的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
三、启动线程
在线程的 Thread 对象上调用 start()方法,而不是 run()或者别的方法。
在调用 start()方法之前:线程处于新状态中,新状态指有一个 Thread 对象,但还没有一个真
正的线程。
在调用 start()方法之后:发生了一系列复杂的事情:
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标
run()
方法将运行。
注意:对 Java 来说,run()方法没有任何特别之处。像 main()方法一样,它只是新线程知道调
用的方法名称(和签名)。因此,在 Runnable 上或者 Thread 上调用 run 方法是合法的。但并
不启动新的线程。
四、例子
1、实现 Runnable 接口的多线程例子
/**
* 实现 Runnable 接口的类
*
* @author leizhimin 2008-9-13 18:12:10
*/
public class DoSomething implements Runnable {
private String name;
public DoSomething(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 5; i++) {
for (long k = 0; k < 100000000; k++) ;
System.out.println(name + ": " + i);
}
}
}
/**
* 测试 Runnable 类实现的多线程程序
*
* @author leizhimin 2008-9-13 18:15:02
*/
public class TestRunnable {
public static void main(String[] args) {
DoSomething ds1 = new DoSomething("阿三");
DoSomething ds2 = new DoSomething("李四");
Thread t1 = new Thread(ds1);
Thread t2 = new Thread(ds2);
t1.start();
t2.start();
}
}
执行结果:
李四: 0
阿三: 0
李四: 1
阿三: 1
李四: 2
李四: 3
阿三: 2
李四: 4
阿三: 3
阿三: 4
Process finished with exit code 0
2、扩展 Thread 类实现的多线程例子
/**
* 测试扩展 Thread 类实现的多线程程序
*
* @author leizhimin 2008-9-13 18:22:13
*/
public class TestThread extends Thread{
public TestThread(String name) {
super(name);
}
public void run() {
for(int i = 0;i<5;i++){
for(long k= 0; k <100000000;k++);
System.out.println(this.getName()+" :"+i);
}
}
public static void main(String[] args) {
Thread t1 = new TestThread("阿三");
Thread t2 = new TestThread("李四");
t1.start();
t2.start();
}
}
执行结果:
阿三 :0
李四 :0
阿三 :1
李四 :1
阿三 :2
李四 :2
阿三 :3
阿三 :4
李四 :3
李四 :4
Process finished with exit code 0
对于上面的多线程程序代码来说,输出的结果是不确定的。其中的一条语句 for(long k= 0; k
<100000000;k++);是用来模拟一个非常耗时的操作的。
五、一些常见问题
剩余84页未读,继续阅读
资源评论
- penii62015-05-20内容不错,但是排版有些问题
学bu会喵de猫
- 粉丝: 81
- 资源: 34
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功