多线程(1)—单线程
- 1.线程:
- 线程时轻量级的进程
- 线程没有独立的地址空间
- 线程是有进程创建的(寄生在进程)
- 一个进程可以拥有多个线程
- 2.线程的状态:
- 新建、
- 就绪
- 运行
- 阻塞、
- 死亡
- 3.java中一个类要当作线程来使用有两种方法
- 1.继承Thread类,并重写run函数
- 2.实现Runnable接口,并重写run函数
- 4.例子
/**1.使用方法一和方法二编写一个程序,该程序每隔一秒在控制台输出一个“HelloWorld”,输出十个就退出
*/
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.start();//方法一启动线程,此处没有调用run函数,也会运行此函数
Dog dog = new Dog();
//创建一个线程对象,方法二启动线程
Thread t = new Thread(dog);
t.start();
//一个线程只能启动一次,否则会报错
//t.start();报错
//创建多个线程对象再运行就不会报错,但会涉及线程安全的问题
Thread t1 = new Thread(dog);
Thread t2 = new Thread(dog);
t1.start();
t2.start();
}
}
class Cat extends Thread{
int time = 0;
//重写run函数
public void run(){
while(true){
//
try {
//线程休眠1000毫秒,进入到阻塞状态,并释放所占用的资源
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//计数器
time++;
System.out.println("方法一:HelloWorld "+time);
//输出十次就退出
if(time == 10){
break;
}
}
}
}
class Dog implements Runnable{
int time = 0;
@Override
public void run() {
while(true){
//
try {
//线程休眠1000毫秒,进入到阻塞状态,并释放所占用的资源
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//计数器
time++;
System.out.println("方法二:HelloWorld "+time);
//输出十次就退出
if(time == 10){
break;
}
}
}
}