多线程的理解一
来源:互联网 发布:mysql安装教程mac 编辑:程序博客网 时间:2024/05/16 06:53
线程
就是进程中的一个负责程序执行的控制单元(执行路径)一个进程可以多执行路径,成为多线程
进程
一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程
线程和进程的区别
1.进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的。
2.线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互影响。
多线程的作用
通过提高程序对CPU的利用率提高程序的效率
多线程的实现
1、通过Thread方法
对run方法实现覆盖重写,Thread类的start方法开启线程。(thread类实现了runnable接口)
2、实现runnable接口
对run方法实现覆盖,把子类的对象传给thread类的构造方法,使用thread类的start方法开启线程。
两者之间的区别
thread实现的多线程各自完成自己的任务
runnable实现的多线程是共同完成一个任务实现,多个线程对一个资源的共享调用
多线程带来的资源同步问题
使用synchronized同步代码块
使用锁机制
package sxd.thread;public class Demo extends Thread{private int ticket = 10;public void run(){for(int x = 0;x < 10; x++){if(this.ticket > 0){System.out.println(Thread.currentThread().getName()+"ticket..."+this.ticket--);}System.out.println("...x:"+x+"...name:"+Thread.currentThread().getName());}}}package sxd.thread;public class Demo extends Thread{private int ticket = 10;public void run(){for(int x = 0;x < 10; x++){if(this.ticket > 0){System.out.println(Thread.currentThread().getName()+"ticket..."+this.ticket--);}System.out.println("...x:"+x+"...name:"+Thread.currentThread().getName());}}}
package sxd.runnable;public class Demo implements Runnable { private int ticket = 100;@Overridepublic void run() { show();}private void show(){for(int i = 0;i < 200;i++){synchronized (this) {if(this.ticket > 0){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"买票..ticket"+ this.ticket--);}}}}}//测试类package sxd.runnable;public class RunnableDemo {public static void main(String[] args) { Demo a = new Demo(); Thread d1 = new Thread(a,"窗口1"); Thread d2 =new Thread(a,"窗口2"); d1.start(); d2.start();} }
阅读全文
0 0
- 多线程的理解一
- 多线程 的理解(一)
- 对于java多线程的理解(一)
- java多线程学习笔记(一)!更好的理解多线程
- JAVA笔记:多线程的理解及应用(一)
- ios开发关于多线程编程的理解(一)
- 学习系列一:多线程理解
- Java 多线程理解(一) 多线程技能
- Java多线程(一)、理解进程与多线程的概念及关系
- java多线程的理解
- 多线程同步的理解
- 多线程的理解
- 多线程的理解
- 多线程的理解
- 多线程的理解
- java多线程的理解
- iOS 多线程的理解
- Java多线程的理解
- SSH-CRUD-删除
- 多态+多态对象模型
- Python数据处理扩展包
- PL/SQ符号大全
- Solidity 字典映射Mappings
- 多线程的理解一
- Java for Web学习笔记(九二):消息和集群(7)RabbitMQ和消息模式(上)
- 数据结构实验之二叉树五:层序遍历
- IDEA搭建Spring+SpringMVC+mybatis框架教程
- 【tensorflow】CycleGAN + anaconda3 + tflearn + keras
- Eclipse创建Web工程的目录结构及含义
- 1064分段函数
- a new beginning
- 重写equals方法之后为什么要重写hashCode方法