- 浏览: 120226 次
- 性别:
- 来自: 地球
文章分类
最新评论
-
754731046:
很适合对初学者适用,谢谢
Oracle存储过程详解 -
天明破晓:
我测试了,不好用
Java中的正则表达式验证各种电话号码 -
OracleX:
otom31 写道从来不用标签库,几乎不用struts,除了最 ...
标签库的优点、缺点大辩论 -
otom31:
从来不用标签库,几乎不用struts,除了最早公司要使用以外; ...
标签库的优点、缺点大辩论
1.进程与线程
每个进程都独享一块内存空间,一个应用程序可以同时启动多个进程。比如IE浏览器,打开一个Ie浏览器就相当于启动了一个进程。
线程指进程中的一个执行流程,一个进程可以包含多个线程。
每个进程都需要操作系统为其分配独立的内存空间,而同一个进程中的多个线程共享这块空间,即共享内存等资源。
每次调用java.exe的时候,操作系统都会启动一个Java虚拟机进程,当启动Java虚拟机进程时候,Java虚拟机都会创建一个主线程,该线程会从程序入口main方法开始执行。
Java虚拟机每启动一个线程,就给会给该线程分配一个线程方法栈,用来存放相关信息(比如局部变量等),线程就在这个栈上运行。所以Java对象中的局部变量都是线程安全的,但实例变量及类变量由于不是保存在栈中,所以不是线程安全的。
进程有三种状态:就绪、执行、阻塞。
2.线程创建方式
Runnable方式:(此种方式灵活,推荐使用)
public class Thread02 implements Runnable { public static void main(String[] args) { Runnable r = new Thread02(); Thread t1 = new Thread(r, "t1"); /** * Thread源码 * public Thread(Runnable target, String name) { init(null, target, name, 0); } */ Thread t2 = new Thread(r, "t2"); t1.start(); // 启动线程t1,处于就绪状态,等待cpu t2.start(); // 启动线程t2,处于就绪状态,等待cpu t1.run(); // 主线程main调用对象t1的run方法 } public void run() { System.out.println("thread's name is " + Thread.currentThread().getName()); } }
运行结果可能是:
thread's name is t1
thread's name is main
thread's name is t2
Thead方式
public class Thread03 extends Thread { public static void main(String[] args) { Thread03 t1 = new Thread03(); //不注意的情况下写成了Thread t1=new Thread() 注:Thread03此时就是一个线程了 t1.start(); } public void run() { System.out.println("thread's name is " + Thread.currentThread().getName()); } }
运行结果:thread's name is Thread-0
注意:每次程序运行时除了自定义的线程外还有一个main线程。
综合:
public class Thread01 { public static void main(String[] args) { Thread thread=new Thread(); thread.start();//真正起作用 的是run() /**而Thread中的run * public void run() { if (target != null) { target.run(); } } 所以自己创建的线程要重写run方法,把要执行的内容放到run()中,所以要实现接口或继承进而产生子类 */ //创建线程的方式1 thread子类方式(继承) Thread thread1=new Thread(){ public void run() { while(true){ try { Thread.sleep(500);//休息500毫秒 } catch (InterruptedException e) { e.printStackTrace(); } //Thread.currentThread()得到当前线程 System.out.println("线程1的名字是 "+Thread.currentThread().getName()); } } }; // thread1.start(); //不写 线程无法启动 //创建线程的方式2 runnable方式(实现) 推荐使用 Thread thread2=new Thread(new Runnable(){ public void run() { while(true){ try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread2'name is "+Thread.currentThread().getName()); } }}); // thread2.start(); //执行的是thread new Thread(new Runnable(){ public void run() { System.out.println("runnable "+Thread.currentThread().getName()); }}){ public void run() { //子类中的run方法覆盖父类中的run方法,这样就不会执行runnable System.out.println("thread "+Thread.currentThread().getName()); } }.start(); } /*** * 在单个cpu中执行多线程很有可能降低执行效率而不是提高 一个人在不同地方做同一件事情 */ }
发表评论
-
AOP的实现(JDK动态代理)
2011-11-29 16:21 969转自:http://www.blogjava.net/D ... -
Java 枚举7常见种用法
2011-11-27 22:54 850转自:http://helloyesyes.itey ... -
一个Java程序员应该掌握的10项技能
2011-11-18 11:57 9761、语法:必须比 ... -
Java回调函数使用
2011-08-16 16:14 686正常情况下开发人员使用已经定义好的API,这个过程叫 ... -
为什么要设置Java环境变量(详解)
2011-08-17 21:40 648从大二开始接触Java,之后是断断续续的学习。大三真正开始 ... -
很长空格的String转换成Array数组
2011-08-23 14:40 1257开发中碰到了一个需求,需要把键值对字符串分隔,但键值之 ... -
不同格式的日期字符串转换
2011-08-23 14:44 920先把字符串日期转换成对应的格式,然后再转换成日期 p ... -
用序列化(Serializable)保存、读取对象
2011-08-23 15:33 828实现Serializable借口的对象可以被转换成一系列 ... -
JUint测试
2011-08-23 15:36 628ClassA.java public class Cla ... -
解决Join方法的疑惑
2011-08-23 20:57 974很长时间对join方法感到疑惑,不明白到底是谁要阻塞,谁要继 ... -
线程学习笔记【2】---Timer(定时器)
2011-08-28 09:15 740入门 public class Time01 { ... -
线程学习笔记【3】---互斥技术
2011-08-29 15:10 719第一个示例更多的是运用了内部类的特性: 内部类重要特点:可以 ... -
线程学习笔记【4】---线程之间通信
2011-08-29 17:31 715子线程先循环10次,然后主线程循环100次,再子线程循环10次 ... -
线程学习笔记【5】--ThreadLocal应用
2011-09-05 15:31 767基本的ThreadLocal使用 public clas ... -
各种创建单例模式的优缺点
2011-09-05 21:54 789单例模式应用于一个类只有一个实例的情况,并且为其实例提供一个全 ... -
格式化简单例子
2011-11-04 16:35 794参考:http://android.blog.51cto.co ... -
图片上传源码(commons-fileupload-1.2.2)分析
2011-11-03 11:20 2019题记:文章是供自己查看方便,所以没有进行格式化,请见谅 ... -
用序列化(Serializable)保存、读取对象
2011-08-23 15:56 877实现Serializable借口的对象可以被转换成一系 ... -
IO各种流使用清晰区别
2011-08-10 11:39 800引用:http://www.iteye.com/topic/1 ... -
创建File和Properties
2011-08-08 10:03 700package com.file; import ...
相关推荐
一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的...
多线程学习笔记,通过平时的学习所做的一些笔记,希望对广大同仁有所帮助
多线程学习笔记,关于创建线程,删除线程等相关指令的应用。
java线程学习笔记
1、查看网络上的图片 2、主线程阻塞-ANR 3、刷新UI-Handler 4、在本地缓存图片-例如微信的图片 5、获取开源代码 6、显示一个新闻客户端 7、使用GET方式提交表单数据 8、使用POST方式提交表单
多线程学习笔记...多线程学习笔记...多线程学习笔记...多线程学习笔记...
关于如何在基于Linux的C语言开发中创建进程和线程
java学习笔记2(多线程)java学习笔记2(多线程)
尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...
基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....
NULL 博文链接:https://baobeituping.iteye.com/blog/1190260
1、使用HttpClient发送GET请求: 2、使用HttpClient发送POST请求:和之前的GET类似 3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用...
多线程学习笔记,好资源。包括线程基础等知识多线程学习笔记,好资源。包括线程基础等知识
线程的基本概念 线程的创建和启动 线程的调度和优先级 线程的状态控制 线程同步
基于博客中Rt-Thread学习笔记-----线程创建(三)的测试工程。里面包含RTThread的单线程动态、静态创建,以及多线程动态静态的配合(基于Stm32F103Zet6、Keil5、rtthread3.1.3)
多线程 学习笔记.md
UNIX多线程学习笔记.docx 第一节 概述 第二节 线程 第三节 互斥锁 第四节 条件变量 第五节 线程的私有数据 第六节 Posix有名信号灯 第七节 共享内存
Python3的多线程学习笔记[定义].pdf