java的线程可以并发的处理任务
一、创建线程的方式
有两种:
1 继承Thread类
a 继承Thread类, 覆盖run()方法, 提供并发运程的过程
b 创建这个类的实例
c 使用start() 方法启动线程
2 实现Runnable接口
a 实现Runnable接口, 实现run()方法, 提供并发运程的过程
b 创建这个类的实例, 用这个实例作为Thread构造器参数
创建Thread类.
c 使用start() 方法启动线程
例如:
class Foo implements Runnable{
public void run(){
//....
}
}
Thread t = new Thread(new Foo());
t.start();
可以使用 Thread.currentThread() 方法获得当前线程的引用。
这两种方式的区别,主要是关于共享资源,例如,售火车票的程序:共有100张票,四个售票口,每一个窗口只要售票都会使总票数-1,并且锁定正在出售的票,那么每个窗口都是一个线程,如果用第一种方式创建新的线程,那么他们每个线程操作的票数都是各自的私有资源,如果Runnable接口的实现类里面定义总票数,用实现类作为参数创建新线程,这样四个线程操作的车票资源就是同一个。
二、线程状态:
1 new (新建)
2 Runnable
3 Running
4 Block 阻塞
5 Dided
三、线程的同步
1 多个线程并发读写同一个临界资源时候会发生线程安全问题
2 可以使用 同步代码块解决 同步读写临界资源, 解决并发安全问题.
3 a 同步代码块
synchronized(同步监视器){
}
b 同步监视器 是一个任意对象实例. 是一个多个线程之间的互
斥的锁机制. 多个线程要使用同一个"监视器" 实现同步互斥
c 常见写法:
synchronized(this){
}
d 如果方法的全部过程需要同步, 可以简单使用 synchronized
修饰方法.
例子:
1 StringBuffer 是同步的
synchronized append();
StringBuilder 不是同步的
append();
2 Vector 和 Hashtable 是同步的
ArrayList 和 HashMap 不是同步的
3 Collections.synchronizedList()
ArrayList list = new ArrayList();
List syncList = Collections.synchronizedList(list);
分享到:
相关推荐
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
java多线程按需交替执行,java新特性。
java线程1-10_720p版本
Java多线程--让主线程等待所有子线程执行完毕
java线程-Java内存模型;java线程-Java内存模型;java线程-Java内存模型;java线程-Java内存模型;java线程-Java内存模型;java线程-Java内存模型java线程-Java内存模型
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 ...
Java多线程--线程安全问题练习题
JAVA多线程--信号量(Semaphore)_.docx
Java-Thread-Affinity,将Java线程绑定到给定的内核.zip
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-...
java多线程学习-ftp上传
Java多线程--线程的安全问题与线程的同步机制介绍
Java多线程--线程间的通信
Java多线程--线程的生命周期
Java多线程--多线程相关概念
Java线程 讲到线程的各个方面 培训内部资料
java线程安全-往盘子里放鸡蛋和向盘子里取鸡蛋代码实现
Java多线程--同步机制解决线程安全问题方式二:同步方法
Java多线程--解决单例模式中的懒汉式的线程安全问题