java中的线程和多线程
来源:互联网 发布:口红与经济数据表格 编辑:程序博客网 时间:2024/05/21 02:33
说道线程,首先我们要先知道什么是进程。
1.什么是进程?
进程:说白了就是一个正在执行的程序。好比你经常玩的LOL,经常编码用的eclipse等都是一个进程。
在每一个进程中,都有一个控制单元。
2.什么是线程?
线程:其实就是进程中的每一个控制单元。也就是说线程控制着进程的执行顺序。
打个比方,好比一个服装店(进程)只有一间试衣间(一个线程),
但这个时候同时有很多顾客,但这个时候每次只能有一个顾客能进入试衣间试衣服。
3.创建线程有几种办法?
a.extends Thread类。。(Thread的底层其实也是Ruannable接口)
b.implements Runnable这个接口。
记住:(1)无论是继承还是实现,都要重写里面的run方法。最后调用start方法来启动线程。
(2)实现Runnable接口后,在调用的时候要先通过Thread类建立对象,然后再调用start()方法。
Ticket t1 = new Ticket();Thread t = new Thread(t1);
4.线程在什么时候会被启动?
在JVM启动的时候首先创建了一个java.exe的进程,这个进程中至少有一个线程,这个线程存放在main方法。当程序运行的时候,线程被调用,也就是说main方法执行的时候
里面定义的线程和主线程会被调用,当结束的时候GC(垃圾回收)线程也会被调用。(这个时候也能被称为多线程的运行)。
public static void main(String[] args) {Test t1 = new Test("one");Test t2 = new Test("two");t1.start();t2.start();for(int i =0;i<50;i++){System.out.println("main ---- "+i);}}}class Test extends Thread{public Test(String name){super(name);}@Overridepublic void run() {for(int i =0;i<50;i++){System.out.println(this.getName()+"---- "+i);}}
运行的结果:线程是交替执行的,不是执行完一个线程再去执行另一个线程的,而且每次执行的结果也是不同的。注意:这里在执行线程的时候,是调用线程中的start()方法来执行线程的,而不是调用被重写的run方法来执行线程的。(这里你可以调用run()方法来看看结果)
5.线程执行的五个步骤:
6.如何解决多线程中的线程执行顺序的问题
给用到线程的地方加一个同步机制,也就是 synchronized关键字。
有两种方式加synchronized关键字,
(1)是在run()里面在需要被用到线程的地方加上关键字。以购票系统来说吧,多个人想买票,这个票就是要被多个人购买(这就是多线程的地方)。
public void run() {while(true){synchronized(this){if(ticket>0){System.out.println(Thread.currentThread().getName()+"----sale:"+ticket- -);}}}
注意:如果要被synchronized关键字修饰的方法中有static关键字,那么这个方法中synchronized(当前对象名.class)这么写,是因为 静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象,类名.class。
(2)是加在run()方法上,但是这种方式延缓执行时间。
public synchronized void run()
- java中的线程和多线程
- java中的多线程——线程创建方式、线程互斥和线程间通信
- java多线程和线程池
- [java多线程]进程和线程
- Java多线程和线程池
- java 多线程和线程池
- Java多线程和线程池
- java多线程和线程池
- Java多线程和线程池
- Java多线程和线程池
- Java多线程和线程池
- Java多线程机制--Java中的线程
- java-多线程 | 线程安全和线程同步
- Java线程和多线程(五)——单例类中的线程安全
- Java中的多线程(一)之多线程创建
- Java中的多线程(二)之多线程同步
- 多线程:Java 线程中的异常捕获
- Java中的多线程,线程锁,以及死锁
- Java的swing界面拖拽文件至文本框显示文件路径
- 线代中最基础的两种玩法
- 并查集找亲戚
- 【HIbernate框架学习】:Hibernate对象关系映射之一对一关联映射(一)
- LA 3041 Colored Cubes (暴力枚举+贪心)
- java中的线程和多线程
- 【C2065】未声明的标识符
- 【C++学习】【阶段一】数据初始化&运算符优先级&条件循环语句
- 10.4 eval函数和feval函数
- roundcube
- MemberCache缓存中间件测试版
- 阶乘函数
- 跳跃表(skiplist)实现及简单分析
- ELF hash section