java多线程---基础
一, java多线程----线程与进程
进程: 程序(任务)的执行过程,拥有资源(共享内存,共享资源)和线程(一个或者多个,至少一个)。 例如:打开任务管理器,qq,chrome,都属于进程。
线程: 系统中最小的执行单元,同一进程中有多个线程,线程共享进程的资源。 例如:qq的聊天发送消息。
单线程:程序中只有一个线程,实际上主方法就是一个主线程。
多线程:程序中运行多个任务, 目的是更好的使用cpu资源。
二,java多线程----线程的实现
简单一句话来说,继承Thead类或者实现Runnable这个接口,然后重写里面的run方法。
继承Thead类
public class MyThead extends Thread{
private String name;
public MyThead(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(name+"------"+i);
}
}
}
实现Runnable接口
public class MyRunnable implements Runnable{
private String name;
public MyRunnable(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(name+"----"+i);
}
}
}
启动线程
public class TheadDemo {
public static void main(String[] args) {
MyThead t1 = new MyThead("t1");
MyThead t2 = new MyThead("t2");
t1.start();
t2.start();
MyRunnable r1 = new MyRunnable("r1");
MyRunnable r2 = new MyRunnable("r2");
Thread t3 = new Thread(r1);
Thread t4 = new Thread(r2);
t3.start();
t4.start();
}
}
三,java多线程----线程的状态
创建状态:创建多线程对象。
就绪状态: 调用start(),等待cpu调用。
运行状态: 执行run()。
阻塞状态:暂时停止执行,将资源交给其他线程使用。
终止状态:线程结束。
四,java多线程----常用的方法(thead类里面)
获取当前线程的对象 currentThread()
得到线程名称 getName()
判断线程是否运行 isAlive()
线程的强行运行 join() 例如:俩个线程t1,t2, 当在t1执行的时候,t2调用join()方法,t1暂停不执行,t2执行,执行完成后,释放资源,t1接着执行。
线程的休眠 sleep() 例如:t1每执行一次,等待5秒 t1.sleep(5000)
线程的礼让 yield() 例如:俩个线程t1,t2, 当在t1执行的时候,t1调用yield()方法,t1暂停不执行,t2执行,执行完成后,释放资源,t1接着执行。
五,java多线程---- 优先级
MIN_PRIORITY 小
MAX_PRIORITY 大
NORM_PRIORITY 正常状态
如果什么都不设置,默认是5
线程的优先级其实可以影响线程的执行顺序,这里的影响是可能性的,有可能影响到了,也有可能没有 。
六,java多线程----同步与死锁
同步的俩种方式,同步代码块,同步方法
同步代码块格式
synchronized( 同步的对象){
同步的代码
};
同步方法
public synchronized void 方法名(){
同步的代码
};
例子:java代码实现火车站三个窗口进行卖票,如果没有同步的话,会怎么样,同步的话,又会出现怎么的情空呢?
没有同步的代码
class MyRun implements Runnable{
//火车站有5张票
private int ticket = 5;
@Override
public void run() {
for (int i = 0; i < 10; i++) {
if(ticket > 0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("车票:"+ticket--);
}
}
}
}
public class TheadDemo {
public static void main(String[] args) {
MyRun run = new MyRun();
Thread t1 = new Thread(run, "窗口一");
Thread t2 = new Thread(run, "窗口二");
Thread t3 = new Thread(run, "窗口三");
t1.start();
t2.start();
t3.start();
}
}
结果;

同步代码块实现代码
class MyRun implements Runnable{
//火车站有5张票
private int ticket = 5;
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized (this) {
if(ticket > 0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("车票:"+ticket--);
}
}
}
}
}
public class TheadDemo {
public static void main(String[] args) {
MyRun run = new MyRun();
Thread t1 = new Thread(run, "窗口一");
Thread t2 = new Thread(run, "窗口二");
Thread t3 = new Thread(run, "窗口三");
t1.start();
t2.start();
t3.start();
}
}
结果:

结论:在多线程的情况下,为了确保资源准确,或者说数据的准确,我们必须使用线程同步。也就是说加synchronized关键字
死锁的概念-------所谓死锁是指多个进 程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
http://c.biancheng.net/cpp/html/2604.html 可以看看该文章,里面解释的很清楚。
七,java多线程----线程的生命周期

java多线程---基础的更多相关文章
- [转]Java多线程干货系列—(一)Java多线程基础
Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...
- Java多线程基础:进程和线程之由来
转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够 ...
- Java 多线程——基础知识
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java多线程--基础概念
Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执行后续行为:而异步方法调用,一旦开始,方法调用就立即返回,调用者不用等待就可以继续执行 ...
- Java多线程基础知识总结
2016-07-18 15:40:51 Java 多线程基础 1. 线程和进程 1.1 进程的概念 进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程, ...
- Java基础16:Java多线程基础最全总结
Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...
- 1、Java多线程基础:进程和线程之由来
Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...
- Java 多线程基础(一)基本概念
Java 多线程基础(一)基本概念 一.并发与并行 1.并发:指两个或多个事件在同一个时间段内发生. 2.并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
- Java 多线程基础(三) start() 和 run()
Java 多线程基础(三) start() 和 run() 通过之前的学习可以看到,创建多线程过程中,最常用的便是 Thread 类中的 start() 方法和线程类的 run() 方法.两个方法都包 ...
- Java 多线程基础(四)线程安全
Java 多线程基础(四)线程安全 在多线程环境下,如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线 ...
随机推荐
- Scut游戏服务器引擎5.6.3.5发布
版本:5.6.3.5 (2013-11-25) 1. 优化实体ChangeKey队列,减少写库IO(默认为5分钟写入一次数据库) 2. 优化Protobuf序列化启用自动GZip压缩,减少Redis内 ...
- Android 两种注册、发送广播的区别
前言:前面文章记录了Service的使用,这次来记录另一个四个组件之一的BroadcastReceiver.主要介绍两种发送和注册广播的区别. BroadcastReceiver广播接收者用于接收系统 ...
- MFC中 SDI/MDI框架各部分指针获取方式
VC MFC SDI/MDI框架各部分指针获取方式 整理总结一下,希望能帮助到别人. 获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...
- EasyMvc入门教程-基本控件说明(2)定时器
我们有时候希望系统能自动刷新后台数据或者做某个动作,那么定时器的作用就体现出来了. EasyMvc默认提供的服务器可以定时调前端方法与定时调后端方法,先看例子: 定时调客户端事件 实现代码: @Htm ...
- python例子
例一:for循环 for i in range(1,100): if i==23: print "great,%s you got your lucky number:" %(i) ...
- XML基础知识学习
概念: XML 指可扩展标记语言 XML 是一种标记语言,非常类似 HTML ,文本文件. XML 的设计宗旨是数据传输,而非显示数据 .存储和传输复杂的关系模型数据 XML 标签没有被提前定义 使用 ...
- 面试题:使用finalkeyword修饰一个变量时,是引用不能变,还是引用的对象不能变?
/* * 问题:使用finalkeyword修饰一个变量时,是引用不能变,还是引用的对象不能变 * 答: * 使用finalkeyword修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内 ...
- 我是这样使用template.js来异步渲染数据的demo
直接来代码吧! <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- iscroll的理解
1. 最佳的HTML结构如下: <div id="wrapper"> <ul> <li>...</li> <li>... ...
- 工作总结 a标签 <a href="/meetingtheme">Back to List</a> 返回上一级 指向 控制器 默认Index @Html.ActionLink("Edit59", "Edit", new { id = item.ID }) 默认当前控制器
@Html.ActionLink("Back to List", "Index") ---- <a href="/doctorinfo&qu ...