java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)(一)

2014-11-24 08:29:18 · 作者: · 浏览: 4
线程
线程:
线程:一个线程可以看做是一个顺序流,它支持一个进程的运行,开启一个进程,有可能有一个或者多个线程运行启动
进程:在操作系统中每开启一个程序,都可以看做是一个进程
多线程:在同一个任务程序中可以有多个线程支持它运行
多进程:在操作系统中可以同时开启多个任务,一个任务代表一个进程
Java线程模型:
执行一个线程类 有java虚拟机虚拟出一个Cpu来,来处理线程类所做的操作,虚拟出来的cpu就可以对线程中数据或者代码进行运行,将对应的数据传递到线程对象中去,每次cpu执行的线程都是一个单一线程。
线程的创建有两种方法:
继承Thread类
此类实现了Runnable接口
Thread类的构造器:
构造方法摘要
Thread()
直接创建新的 Thread 对象。 用在继承中
Thread(Runnable target)
创建一个线程 用在实现接口时
Thread(Runnable target,String name)
创建一个线程 用在实现接口时 并且给线程取一个名字
Thread(String name)
创建线程 给线程取名
Thread(ThreadGroup group,Runnable target)
创建一个线程 传递一个线程组 和接口引用对象。
Thread(ThreadGroup group,Runnable target, String name)
分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
Thread(ThreadGroup group,Runnable target, String name, long stackSize)
分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
Thread(ThreadGroup group,String name)
分配新的 Thread 对象。
package com.ibm.thread;
public class FirstThread extends Thread {
public void run(){
//在run方法中输出1到10并且加上线程的名称
for(int i = 1;i<=10;i++){
System.out.println(this.getName()+":"+i);
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args) {
Thread tt = new FirstThread();
tt.start();
}
//1、启动一个线程调用的是start方法
//2、线程的命名默认为Thread-num
//3、通过继承创建线程类的对象是将子类对象赋给了父类的引用
//4、Thread.currentThread()是取到当前线程 在当前线程中可以用this关键字代替
//5、run方法所做的操作就是线程体
//6、一个线程在创建之后处于可运行状态,当调用start方法之后,那么线程就从可运行状态到运行状态 ,当执行完run中的内容,那么线程就结束。
//7、不可以直接调用run方法来执行线程体里面的内容
}
*实现Runnable接口
创建线程需要实现Runnable接口,那么就应该将接口中未实现的方法实现过来,此接口中只有一个未实现的Run方法
package com.ibm.runnable;
public class FirstRunnableimplements Runnable{
//继承Runnable接口,并且添加未实现的方法
@Override
public void run() {
//在线程体中输出1到10
for(int i=1;i<=10;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
//创建线程类的对象,启动线程
public static void main(String[] args) {
//创建一个接口的实现类的对象
FirstRunnable fr = new FirstRunnable();
//将接口的实现类的对象赋给接口的引用并传递到Thread的构造器中去
Thread tt = new Thread(fr,"线程一");
tt.start();
}
//1、创建线程需要实现Runnable接口
//2、需要实现接口中的run方法
//3、创建线程类的对象调方法
//4、Thread类中构造器传递的字符串就是线程的名字
//继承Thread类与实现Runnable的优缺点?
//继承thread的优点:1、创建线程类对象时编写简单、可以直接使用this关键字
//缺点:继承thread类之后,那么此类就不能继承其他类
//实现Runnable接口的优点:1、可以继承其他类
//2、将cpu和代码数据分开形成清晰的模型
//实现多线程的时候一般情况下都是实现runnable接口,可以在方法中直接传递接口的引用,
//每一个实现此接口的对象都可以传递到此方法中来
//如果是继承提thread类,那么就必须创建thread类的对象,传递的必须是thread类的对象,灵活性不高
//3、都要实现runnable接口,实现run方法
//缺点:不能使用this关键字
//创建线程类对象的不同?
//继承thread类创建对象 thread 对象名 = new 子类构造(); 对象名.start();
//实现runnable接口 创建对象 实现类 实现类的对象名 = new 实现类的构造器();
//Thread thread类对象名 = new Thread(实现