多线程是指在同一应用程序下有多个顺序流同时执行
在java中定义一个新的线程类有两种方式:
1)实现runnable接口
2)继承Thread类并重写其run方法
Start方法和run方法的区别:
当要启动线程的时候,调用线程类的start方法即可以启动线程,告诉cpu该线程已经准备好,此时,线程并没有真正的运行,它必须等待cpu的调度,当cpu将时间片分给了该线程,会调度当前线程的run方法,线程才开始真正的执行。run方法由cpu调度,如果用户手动地调用线程类对象的run方法,则是普通的方法调用,不是启动线程。
线程有四种状态,任何一个线程肯定处于这四种状态中的一种:
产生(New):通过new产生了一个线程对象后没对它调用start()函数之前。
就绪:调用线程类对象的start方法后进入就绪状态,等待cpu的调度。
运行:cpu在空闲或者适当的是给线程分得时间片,调用线程的run方法,线程开始执行。当时间片执行完后又重新回到就绪状态,重新进入等待队列,等待cpu的调度。
阻塞:当线程正在运行的时候遇到情况被阻塞,在阻塞解决前处于阻塞状态。当阻塞解除后线程重新进入就绪或者终止状态。
终止:run方法执行完毕,线程也就运行完,进入终止状态。
线程同步:多线程通常会涉及线程同步的问题。
当多个线程同时访问一个公共的资源时,可能会导致数据的不安全。为了保证对共享数据操作的完整性,可以对公共的资源加锁。每个对象都有一个“互斥锁”的标记,这个标记保证在任一时刻,最多只能有一个线程访问该对象。当某个对象被synchronized关键字修饰时,表示该对象在任一时刻只能有一个线程访问。可以在代码块里加锁,也可以在方法声明中加锁。
线程控制的基本方法:
isAlive():判断线程是否是活着的:就绪、运行、阻塞状态时返回true。创建和终止返回false。
setPriority():设置线程的优先级。线程的优先级别用数字表示,范围从1到10,一个线程的缺省优先级别是5,数字越大,优先级别越高,获得cpu的执行时间片越多。
Thread.sleep():它是Thread类的静态方法,使当前线程(即调用该方法的线程)暂停执行指定的一段时间,让其他线程有机会继续执行,但如果该线程所执行的方法是锁定的,则它并不释放对象锁,其他线程仍然不同访问共享数据。
wait():它是java.lang.Object类的方法。wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。wait()和notify()、notifyAll():这三个方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用这三个方法。Synchronized这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。如果需要在当前线程还没退出Synchronized数据块时让其他线程也有机会访问共享数据,此时就用这三个方法来灵活控制。
join():调用指定线程的join()方法,将当前线程与指定线程合并,当指定线程结束,再恢复当前线程的运行。
yield():让出cpu,当前线程进入就绪队列等待cpu的调度。
分享到:
相关推荐
C#.net 同步异步 SOCKET 通讯和多线程总结 本文旨在总结 C#.net 中的同步异步 SOCKET 通讯和多线程编程,涵盖服务端和客户端的实现细节。 一、服务端实现 服务端使用 System.Net 和 System.Net.Sockets 命名空间...
【Windows多线程总结】 Windows操作系统提供了一套完整的API来支持多线程编程,使得开发者可以在同一进程中同时执行多个线程,实现并发处理任务。本文将深入探讨Windows多线程编程的基本概念、线程同步、线程池以及...
C#.net同步异步SOCKET通讯和多线程总结 C#.net同步异步SOCKET通讯和多线程总结是指在C#.net环境下实现的同步异步套接字通信和多线程编程的总结。套接字(Socket)是tcp/ip网络协议接口,内部定义了许多的函数和例程...
Java多线程是Java编程语言中的一个重要特性,它允许开发者创建并发执行的多个线程,从而提高程序的执行效率和响应速度。Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 ### 继承Thread类 在...
C++多线程总结 本文档对C++多线程编程进行了总结,介绍了三种创建线程的方法:CreateThread函数、AfxBeginThread函数和_beginthread()/_beginthreadex()函数,同时对线程的管理和终止进行了详细的讲解。 ...
【JAVA多线程总结】 Java 多线程是Java编程中的关键特性,它允许程序同时执行多个任务,提高系统的效率和响应性。本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java...