java多线程剖析

对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于Java语言的产品。本文将简单讲解Java多线程的知识点。

讲解线程之前,先跟大家说一下易混淆的两个概念:进程和线程。

进程:

进程是指一个内存中运行的应用程序(比如一个运行的exe就是一个进程)。

线程:

线程是指进程中的一个执行流程,一个进程可以运行多个线程。

下面我们来剖析一下线程的执行:

1、线程的创建和启动

创建线程:有两种方式

1)继承java.lang.Thread类,直接new实例化线程。

2)实现java.lang.Runnable接口,用Thread的构造方法实例化线程。

启动线程

调用Thread的start()方法。

1-1: 继承Thread类的多线程示例

public class TestThread extends Thread{ public TestThread(String name) { super(name); } public void run() { for(int i = 0;i<5;i++){ for(long k= 0; k <100000000;k++); System.out.println(this.getName()+" :"+i); } } public static void main(String[] args) { Thread t1 = new TestThread("线程一"); Thread t2 = new TestThread("线程二"); t1.start(); t2.start(); } }

1-2:实现Runnable接口的多线程示例

public class MyThread implements Runnable { private String name; public MyThread (String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { for (long k = 0; k < 100000000; k++) ; System.out.println(name + ": " + i); } } } public class TestRunnable { public static void main(String[] args) { MyThread mt1 = new MyThread ("线程一"); MyThread mt2 = new MyThread ("线程二"); Thread t1 = new Thread(mt1); Thread t2 = new Thread(mt2); t1.start(); t2.start(); } }



2、线程的状态转换

3、线程的调度

线程的调度有休眠(sleep),优先级(setPriority),让步(yield),合并(join)。

线程不同的调度使它转换成不同的状态(可参考2中的状态转换表)。

4、线程同步与锁

一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放。

多线程文章推荐:http://lavasoft.blog.51cto.com/62575/222742

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值