多线程(一)
2016-06-03 21:46
281 查看
一、进程和线程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
二、java中的多线程
实现多线程的两种主要方式:一、继承Thread类,二、实现Runnable接口。Thread类结构如下,
public class Thread implements Runnable{ }
因此,我们可以知道两种方式创建的线程在工作时性质一样。但,使用继承Thread类的方式来开发多线程在设计上有局限性,java是单继承的,因此可以使用实现Runnable接口的方式来实现。
1、继承Thread类
public class Thread1 extends Thread { public void run() { super.run(); System.out.println("Thread1"); } public static void main(String[] args) { Thread1 thread1 = new Thread1(); thread1.start(); System.out.println("运行结束!"); } }
小结: 通过多次运行程序可以发现,在使用多线程技术时,代码的运行结果与代码执行顺序或者调用顺序无关。
1、实现Runnable接口。
Thread构造方法构造方法摘要 Thread() //分配新的 Thread 对象。 Thread(Runnable target)/分配新的 Thread 对象。 // 分配新的 Thread 对象 Thread(Runnable target, String name) // 分配新的 Thread 对象。 Thread(String name) // 分配新的 Thread 对象。 Thread(ThreadGroup group, Runnable target) // 分配新的 Thread 对象,以便将 target 作为其运行对象, //将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。 Thread(ThreadGroup group, Runnable target, String name) //分配新的 Thread 对象,以便将 target 作为其运行对象, //将指定的 name 作为其名称,作为 group 所引用的线程组的一员, //并具有指定的堆栈大小。 Thread(ThreadGroup group, Runnable target, String name, long stackSize) // 分配新的 Thread 对象。 Thread(ThreadGroup group, String name)
我们可以知道,构造函数可以传递Runnable对象
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("运行中!"); } public static void main(String[] args) { MyRunnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); System.out.println("运行结束"); } }
二、线程一些简单的用法
1、currentThread() 返回代码正被哪个线程调用的信息。2、isAlive() 判断当前线程是否处于存活状态。
3、sleep() 在指定的毫秒数内让当前“正在执行的线程”休眠。
4、interrupt() 停止线程,不是中断线程而是在当前线程打了一个停止的标记;interrupted() 测试当前线程是否已经中断状态,执行后具有将状态标志清除为false的功能;isInterrupted() 测试Thread对象是否是中断状态,不具备清除状态的标志。
5、yield()放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。但放弃的时间不确定,可能刚刚放弃又立马获得CPU时间片。
6、setPriority() 设置线程的优先级,高优先级的线程总是大部分执行完,但不代表高优先级的线程全部执行完,因为线程的优先级具有“随机性”。
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- C#实现多线程的同步方法实例分析
- C#线程间不能调用剪切板的解决方法
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#子线程更新UI控件的方法实例总结
- C#多线程学习之(六)互斥对象用法实例
- C#线程队列用法实例分析
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 分享我在工作中遇到的多线程下导致RCW无法释放的问题