java基础关于创建线程的两种方式
2014-06-05 18:40
791 查看
创建线程有两种方式,一种继承thread类,另一种实现runnable接口
方式一:public class ThreadDemo01{
public static void main(String[] args) {
Thread01 t1 = new Thread01();
Thread01 t2 = new Thread01();
t1.setName("线程1");//设置线程的名称
t2.setName("线程2");
//启动线程
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName());//main
//t1.start();//无法多次启动同一个线程,抛出IllegalThreadStateException异常
}
}
class Thread01 extends Thread{
public void run(){//线程体
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-->i:" + i);
}
}
}
方式二:
public class Ticket_thread {
public static void main(String[] args) {
//创建4个线程第二种方法
SellTicket s = new SellTicket();
Thread t1 = new Thread(s,"窗口1");
Thread t2 = new Thread(s,"窗口2");
Thread t3 = new Thread(s,"窗口3");
Thread t4 = new Thread(s,"窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class SellTicket implements Runnable{
int ticket = 10;
@Override
public void run() {
// TODO Auto-generated method stub
while (ticket > 0) {
sellTicket();
}
}
public synchronized void sellTicket(){
if(ticket > 0){
try {
Thread.sleep(100);
//Thread.currentThread().getName() 获取当前线程的名称 (currentThread()获取当前运行线程的引用)
System.out.println(Thread.currentThread().getName() +":卖出的第" + ticket-- + "张票");
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标(target)对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
方式一:public class ThreadDemo01{
public static void main(String[] args) {
Thread01 t1 = new Thread01();
Thread01 t2 = new Thread01();
t1.setName("线程1");//设置线程的名称
t2.setName("线程2");
//启动线程
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName());//main
//t1.start();//无法多次启动同一个线程,抛出IllegalThreadStateException异常
}
}
class Thread01 extends Thread{
public void run(){//线程体
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-->i:" + i);
}
}
}
方式二:
public class Ticket_thread {
public static void main(String[] args) {
//创建4个线程第二种方法
SellTicket s = new SellTicket();
Thread t1 = new Thread(s,"窗口1");
Thread t2 = new Thread(s,"窗口2");
Thread t3 = new Thread(s,"窗口3");
Thread t4 = new Thread(s,"窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class SellTicket implements Runnable{
int ticket = 10;
@Override
public void run() {
// TODO Auto-generated method stub
while (ticket > 0) {
sellTicket();
}
}
public synchronized void sellTicket(){
if(ticket > 0){
try {
Thread.sleep(100);
//Thread.currentThread().getName() 获取当前线程的名称 (currentThread()获取当前运行线程的引用)
System.out.println(Thread.currentThread().getName() +":卖出的第" + ticket-- + "张票");
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标(target)对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
相关文章推荐
- 线程创建的两种方式01--Java基础067
- 黑马程序员——java基础——Java中创建线程的两种方式
- 线程创建的两种方式02--Java基础068
- Java基础:多线程之线程创建的两种方式
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- java多线程总结一:线程的两种创建方式及优劣比较
- java#2 线程的两种创建方式
- java学习11--线程创建的两种方式,生命周期以及守护线程
- Java线程的两种创建方式及优劣比较
- Java中创建线程的两种方式
- 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式
- [Java并发编程]-创建线程的两种方式及区别
- java中创建线程的两种方式
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- java多线程总结一: 线程的两种创建方式及优劣比较
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- java创建线程的两种传统方式
- java 创建线程 的两种方式
- java多线程总结一: 线程的两种创建方式及优劣比较