23.java当中的线程

  • 进程和线程
    • 多线程:在操作系统中能(同时)运行多个任务(程序)
    • 多线程:在同一应用程序中有多个顺序流(同时)执行
    • 线程的执行过程

    • 线程的执行过程

    • 创建线程的方法
      • 方法1:定义一个线程类,他继承类Thread并重写其中的方法run(),方法run(),称为线程体;由于java只支持单继承,用这种方法定义的类不能继承其他类
  • 多线程程序运行模式及方法
    • 定义一个类FirstThread继承Thread,之后用复写的方法,线程执行的时候,执行的是run()中的代码
    • 生成FirstThread的对象,然后调用对象线程的start()方法,则该线程进入就绪状态,抢到CPU就进入执行状态
  1. classFirstThread extends Thread{
  2. publicvoid run(){
  3. for(int i =0; i <10; i++){
  4. System.out.println("FirstThread-->"+ i);
  5. }
  6. }
  7. }
  1. classTest{
  2. publicstaticvoid main(String arg []){
  3. //生成线程的对象
  4. FirstThread ft =newFirstThread();
  5. //启动线程
  6. //ft.run(); 千万不能这样写,这样就是单线程,会先执行run()中的方法
  7. ft.start();
  8. //线程交替运行,并且没有规律
  9. for(int i =0; i <10; i++){
  10. System.out.println("main-->"+ i);
  11. }
  12. }
  13. }

结果:

D:\work\src>javac *.java

D:\work\src>java Test

main-->0

FirstThread-->0

main-->1

FirstThread-->1

main-->2

main-->3

FirstThread-->2

FirstThread-->3

main-->4

main-->5

FirstThread-->4

main-->6

main-->7

FirstThread-->5

FirstThread-->6

main-->8

FirstThread-->7

main-->9

FirstThread-->8

FirstThread-->9

  • 多线程数据安全
    • 多线程共用数据的时候,会出现错误,需要引入同步代码块
  • 同步线程的方法
    • 使用:synchronized(this)
  1. classMyThread implements Runnable{
  2. int i =10;
  3. publicvoid run(){
  4. while(true){
  5. /*
  6. synchronized称为同步代码块;
  7. this代表调用run()方法的对象,称为同步锁;
  8. 功能:获得同步锁才有资格运行代码;
  9. **/
  10. synchronized(this){
  11. /*
  12. currentThread()是Thread的静态方法,获取当前代码在哪个线程中运行;
  13. Thread.currentThread().getName()可以获得线程的名字;
  14. **/
  15. System.out.println(Thread.currentThread().getName()+ i);
  16. i--;
  17. Thread.yield();
  18. if(i <0){
  19. break;
  20. }
  21. }
  22. }
  23. }
  24. }
  1. classTest{
  2. publicstaticvoid main(String arg []){
  3. MyThread myThread =newMyThread();
  4. //生成两个Thread对象,但是这两个Thread对象共用一个线程体
  5. Thread t1 =newThread(myThread);
  6. Thread t2 =newThread(myThread);
  7. /*每一个线程都有名字,可以通过Thread对象的setName()方法设置
  8. 也可以使用getName方法来获取线程的名字;**/
  9. t1.setName("线程a");
  10. t2.setName("线程b");
  11. //分别启动两个线程
  12. t1.start();
  13. t2.start();
  14. }
  15. }

结果是:

D:\work\src>javac *.java

D:\work\src>java Test

线程b10

线程b9

线程b8

线程b7

线程b6

线程b5

线程b4

线程b3

线程b2

线程b1

线程b0

线程a-1

来自为知笔记(Wiz)

时间: 2024-10-20 08:25:13

23.java当中的线程的相关文章

Java当中的线程(三)

1. 多线程的数据安全 2. 同步线程的方法 1. 多线程的数据安全 1 class MyThread implements Runnable{ 2 int i = 100; 3 public void run(){ 4 while(true){ 5 System.out.println(Thread.currentThread().getName()+i); 6 i--; 7 Thread.yield(); 8 if(i<0){ 9 break; 10 } 11 } 12 } 13 } 1 c

Java当中的线程(二)

1. 实现线程的第二种方法 2. 控制线程的常用方法 1. 第一种方法是使用继承, 但Java只能使用一次继承, 因此下面这种方法使用的更多 1 class RunnableImpl implements Runnable{ 2 public void run(){ 3 for(int i = 0; i< 100; i++){ 4 System.out.println("Runnable--->" + i); 5 } 6 } 7 } 1 class Test{ 2 publ

Java当中的线程

1. 进程和线程 2. 多线程程序运行模式 3. 定义线程的方法 1. 进程和线程 多进程:在操作系统中能(同时)运行多个任务(程序) 多线程:在同一应用程序中有多个顺序流(同时)执行 2. 多线程程序运行模式 生成线程--->就绪状态--->运行状态--->就绪状态--->运行状态--->....--->死亡状态 3. 定义线程的方法 Java中有两个, 今天学习其中一个. 1 class FirstThread extends Thread{ //定义一个线程类,

Java当中的线程(三)

1.多线程的数据安全 class MyThread implements Runnable{ int i = 100; public void run { while(true){ //Thread.currentThread();获取当前线程是在哪个线程当中运行 System.out.println(Thread.currentThread().getName() + i); i--; Thread.yield(); if(i < 0 ){ break; } } } } class Test{

Java当中的线程(二)

1.实现线程的第二种方法 提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体 class RunnableImpl implements Runnable{ public void run(){ for(int i = 0 ; i < 100 ; i ++ ;){ System.out.println("Runnable-->" + i); } } } cl

【Android 初学】11、关于Android当中的线程(初级)

Start Android 1.回顾Java当中的线程概念 1)线程的两种实现方式 2)线程的生命周期 3)多线程同步 (多个线程访问同一个资源,在同) 2.MainThread与Worker Thread 1)UI相关的代码就是MainThread 2)其他代码就是WorkerThread(不允许操作UI,ProgressBar可以) 3)在一个应用程序当中,主线程通常用于接收用户的输入,以及将运算的结果反馈给用户(也就是主线程不能阻塞) 对于一些可能会产生阻塞的操作,必须放在Worker T

Java并发之——线程池

一. 线程池介绍 1.1 简介 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理.当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源. 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项

Java并发编程——线程池的使用

在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间. 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果.今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,

java笔记--使用线程池优化多线程编程

使用线程池优化多线程编程 认识线程池 在Java中,所有的对象都是需要通过new操作符来创建的,如果创建大量短生命周期的对象,将会使得整个程序的性能非常的低下.这种时候就需要用到了池的技术,比如数据库连接池,线程池等. 在java1.5之后,java自带了线程池,在util包下新增了concurrent包,这个包主要作用就是介绍java线程和线程池如何使用的. 在包java.util.concurrent下的 Executors类中定义了Executor.ExecutorService.Sche