线程
来源:互联网 发布:淘宝装修店招全屏代码 编辑:程序博客网 时间:2024/05/29 08:16
了解进程对我们学习线程很有帮助
理解线程与进程的区别
进程:是指一个内存中运行中的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程
线程:是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据。
多进程:操作系统中同时运行的多个程序
多线程:在同一个进程中同时运行的多个任务
主线程main
在运行一个简单的java程序的时候 就已经存在了两个线程,一个是主线程,一个是后台维护的垃圾回收线程
项目中如何创建并启动线程的两种方式
package cn.xiejian.MyThread;
public class MyThread extendsThread{ @Override public void run(){
// 线程体 线程启动时 会自动调用本方法所以这里我们写代码的主体部分 System.out.println("线程启动成功");
}
}
测试
package cn.xiejian.Test;
import cn.xiejian.MyThread.MyThread;public classTest{
public static void main(String[]args) {
MyThread t=newMyThread(); t.start();
//调用Thread的start方法jvm会自动调用run方法
}
}
但实际开发中我们很少用这种方式 为什么呢?因为我们知道java是单继承 多实现的 所以这种方式的拓展性不强我们通过实现Runnable接口来创建线程
package cn.xiejian.MyThread;
public class MyRunnable implementsRunnable{
@Override
public void run(){
// 线程体 线程启动时 会自动调用本方法所以这里我们写代码的主体部分 System.out.println("线程启动成功");
}
}
测试:
package cn.xiejian.Test;
import cn.xiejian.MyThread.MyRunnable;public class Test2 {
public static void main(String[] args){
MyRunnable tr=newMyRunnable();
Thread t=newThread(tr);
t.start();
}
}
为什么要向传入tr呢?
源码是这样写的
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(),0);
}
线程的执行随机性
一旦一个线程启动之后就是一个独立的线程 等待cpu的调度分配资源 不会因为启动它的外部线程结束而结束
package cn.xiejian.Test;
import cn.xiejian.MyThread.MyThread;public classTest{
public static void main(String[]args) {
MyThread t=newMyThread();
t.start();//调用Thread的start方法jvm会自动调用run方法
for (int i = 0; i <10; i++){
System.out.println("main-->"+i);
}
}
}
package cn.xiejian.MyThread;
public class MyThread extendsThread{
@Override
public void run(){
// 线程体 线程启动时 会自动调用本方法所以这里我们写代码的主体部分
for (int i = 0; i <10; i++) {
System.out.println("MyThread-->"+i);
}
}
}
输出结果:
MyThread-->0
MyThread-->1
MyThread-->2
main-->0
MyThread-->3
MyThread-->4
main-->1
main-->2
main-->3
main-->4
main-->5
main-->6
main-->7
main-->8
main-->9
MyThread-->5
MyThread-->6
MyThread-->7
MyThread-->8
MyThread-->9
由于1线程的随机性,2多线程访问出现网络延迟导致线程出现安全性问题
第一次写 就写写入门级的把 希望大家多多指教 谢谢
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- LinkedHashMap源码分析(一)
- 贪心POJ3069
- iOS的AssetsLibrary框架访问所有相片
- 谷歌离线地图发布服务器
- HDU 3722 Card Game
- 线程
- 什么是泛型?为什么要用泛型?什么是泛型擦除?泛型擦除的过程?
- 使用CSS相对单位构建可缩放的组件
- C++中字符串和数字相互转化实现
- 2016/9/28 21:49
- 2016.09.28 quicksort.c
- 基于Virtual Box搭建centos 7集群以及各类分布式系统环境搭建
- 股神
- ARCGIS影像配准教程