Java多线程(一)初步了解
1:线程
1.1:线程是什么?线程与进程。
进程:正在运行的程序。windows是多进程的系统。每一个进程有自己的内存区域,也就是每个进程都会占用一定的内存。一般打开应用程序就会有进程的了。
线程:进程的一个分支,一个进程至少包含一个线程。一个进程就叫单线程。
每个线程是共享一个内存区域,应该就是共享它所在进程占用的那块内存吧。如果一个程序同时做多件事件,则需要多线程。结合个人理解和网上的一些解释说下自己对多线程的理解
public class SingleThreadDemo1 {
public static void main(String[] args) {
int i = 0, j=1;
while(i<10){
System.out.print(++i+" ");
}
add();
max(i, j);
}
public static void add(){
int i=0, j=0;
for(i=0; i<10; i++,j-=i){
System.out.println(i+j);
}
}
public static boolean max(int x, int y){
if(x>y){
return true;
}
return false;
}
}
首先就先看看一段代码(单线程示例-1)。虽然程序执行了两个方法和一个循环,但是这些循环和方法都是按照顺序执行的,最先的当然是程序的入口:main方法了,接下来就是一个循环,再接着是add()方法,最后就是max(int x, int y)方法。然而有没有一种方式可以让这段代码中的循环、add()、和max(int x, int y),一起(同时)执行,而不用等前面的那个执行完才能执行呢?那么答案就来了——多线程。我觉得多线程突出的就是“同时”。很多我看的一些书和视频几乎都是拿“车站售票”的例子来讲,这个挺容易理解。
1.2:Thread类:线程类。
1.2.1:如何创建线程。
1:创建一个类继承 Thread类,重写run方法。
class MyThread extends Thread{
public void run(){ }
}
MyThread mt = new MyThread();
mt.start( );//启动线程。
2:创建一个类实现Runnable接口。重写run方法。
class MyRunnable implements Runnable{
public void run(){ }
}
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr);
t1.start();
调用start()方法和直接调用run()方法是有很大区别的,调用start()方法是真正的达到了开启一个线程的目的,而调用run()方法只不过是普通的方法调用而已,不涉及线程的开启。
3:创建线程的2种方式比较
优先采用实现Runnable接口。因为实现的同时还可以继承。当多个线程访问同一个资源的时候,这个时候只能采用实现。如果继承和实现都可以解决需求,建议优先使用实现。
1.2.2:常用的方法。
1:start():启动线程
2:getName() :如何获得当前线程的名字。默认名字为Thread-编号。main方法所在的线程;main
3: currentThread:当前线程的引用。静态方法。代码写在哪个线程内部就可以获得这个线程的对象。 Thread.currentThread( )
4:设置线程名称。
4.1:创建线程对象的时候,将线程名称传给构造方法
4.2:调用setName方法。设置线程名称。
5:获得线程的优先级 getPriority(),默认优先级为5.
6:设置优先级。 setPriority( ),优先级范围1-10.优先级高的获得cpu的执行的机会会更多,但是并不能保证一定可以最先拿到cpu的执行权。
7:睡眠 sleep ( )
8:合并 join( ) , 哪个线程调用此方法,则这个线程先执行完。再执行其他的线程。如果线程A需要线程B的执行结果,这个时候可以在线程 A中,用线程B调用join方法。让线程B先执行完。线程A再执行。
9:礼让 yield() 效果不明显。
10:setDaemon(boolean) :设置当前线程为守护线程或者用户线程。
默认情况下,线程都是为前台线程,那么所有的线程执行完,则这个进程就执行完。如果一个进程中有后台线程,当前台线程执行完后,如果后台线程没有执行完,那么这个时候后台线程停止执行,进程结束。前台线程执行完后则整个进程就会结束。也就是当进程中只剩下守护线程了没有执行完,那么不管守护线程有没有执行完,它都要停止执行了。
11:控制线程。
1:将线程设置为后台线程,
2:可以用boolean 类型的变量。
12:中断线程 interrupt( )
13:获得线程的状态 getState()
new -----未启动的线程
Runnable------正在执行的线程
Timed-waitting----正在睡眠的状态
TERMINATED ---- 已经退出的线程。
BLOCK-----受阻塞的线程。未拿到锁或者未拿到cpu的线程的.
========================================================================
《Java多线程(二)》
Java多线程(一)初步了解的更多相关文章
- 第一章 Java多线程技能
1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
- Java最重要的21个技术点和知识点之JAVA多线程、时间处理、数据格式
(四)Java最重要的21个技术点和知识点之JAVA多线程.时间处理.数据格式 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能 ...
- 从JAVA多线程理解到集群分布式和网络设计的浅析
对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些 ...
- Java多线程核心技术(四)Lock的使用
本文主要介绍使用Java5中Lock对象也能实现同步的效果,而且在使用上更加方便. 本文着重掌握如下2个知识点: ReentrantLock 类的使用. ReentrantReadWriteLock ...
- 关于java多线程理解到集群分布式和网络设计的浅析
对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题, 另外关于java多线程的知识也是非常的多,本文中先介绍和说明一 ...
- Java多线程——对象及变量的并发访问
Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...
- Java多线程——锁
Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...
- Java——多线程之对象及变量的并发访问
Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...
- Java多线程技术:实现多用户服务端Socket通信
目录 前言回顾 一.多用户服务器 二.使用线程池实现服务端多线程 1.单线程版本 2.多线程版本 三.多用户与服务端通信演示 四.多用户服务器完整代码 最后 前言回顾 在上一篇<Java多线程实 ...
随机推荐
- javascript 区分对象类型
在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组. ...
- 用 pyqt4 编写的一个翻译小工具
有时候我们在开发时遇到一些陌生的英文单词或者不容易看出某些长句的中文意思时该怎么办呢?打开桌面上的翻译软件?打开浏览器里收藏着的翻译网址或者直接贴上百度的搜索框去查?这些方法固然可以,还很常见,但如果 ...
- 详解CSS float属性
CSS中的float属性是一个频繁用到的属性,对于初学者来说,如果没有理解好浮动的意义和表现出来的特性,在使用的使用很容易陷入困惑,云里雾里,搞不清楚状态.本文将从最基本的知识开始说起,谈谈关于浮动的 ...
- solr特点三: boost(改变默认打分排序)
有时候默认的字段打分不能满足我们的需要,如我们想把关键词出现在标题中的优先显示. 测试于:Solr 4.5.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS 5.7 实现 ...
- Eclipes批量创建文件夹
package file; import java.io.File; import java.io.IOException; import java.util.Scanner; public clas ...
- css3 animation动画使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux 服务器上安装Webmin
1.登陆到服务器 2.新建一个文件夹来保存webmin,建议在个人用户下新建., 3.下载Webmin的安装文件, 命令是: wget http://prdownloads.sourceforge.n ...
- BZOJ 3110 [Zjoi2013]K大数查询 (CDQ分治+树状数组)
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...
- 白帽hacker酷炫小技能大盘点!
白帽子是谁? 他们与一行行代码打交道,在“0”和“1”的世界中寻找风险,在IT产业软硬件核心技术和代码等自主研发能力不足.安全防护手段滞后.地下黑客业务已形成产业链的背景下,我国网络安全正面临日益严峻 ...
- jdk命令行工具(一)
1.概述 熟悉java开发的人应该都知道在jdk的bin目录下有许多的工具,这些工具主要用于监视虚拟机和故障处理.这些故障处理工具被Sun公司称作为“礼物”附赠给JDK的使用者,并在软件的使用说明中把 ...