这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)
1、多线程
(1)进程:正在进行的程序。
线程:进程中的一个执行单元。
一个进程中有多个线程在执行时,就成了多线程问题。
多线程解决的问题:可以让多部分代码同时执行。
例子:java中多线程例子
main线程和垃圾回收线程同时执行。
System.gc();//启动垃圾回器,垃圾回收器在回收每个对象垃圾时,
//都会自动调用改对象的 finalize方法。
(2)为什么要启动多线程?
因为有多部分代码需要同时执行。
(3)创建线程的两种方法
<1>定义类,继承Thread类,覆盖Thread类中的run方法。
实例(run方法和start方法的区别、
Thread.currentThread().getName()和this.getName()的区别):
class ThreadDemo extends Thread
{
String name;
ThreadDemo(String name){
this.name = name;
}
public void run(){
for(int i=0;i<10;i++){
System.out.println(name+"------>"+Thread.currentThread().getName());
}
}
}
class Demo
{
public static void main(String[] args)
{
ThreadDemo demo1 = new ThreadDemo("小明");
ThreadDemo demo2 = new ThreadDemo("哈哈");
//demo1.run();
//demo2.run();
demo1.start();
demo2.start();
}
}
注:通过线程对象直接调用run方法时,并没有创建新的对象。
调用start方法时才创建了新的线程。
<2>创建线程的第二种方法(好处:避免了单继承的局限性)
由来:Runnable接口其实就是将线程的任务进行的封装。
使用:
1、实现Runnable接口,创建类
2、类中实现Runnable中run()方法。
3、创建对象。
4、创建线程对象,并将实现Runnable对象类的对象,传给线程对象。
5、调用线程对象的start()方法。
class Ticket implements Runnable{
private static int num=100;
public void run(){
while(true){
if(num>0){
System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
}else{
break;
}
}
}
}
public class SellTicket {
public static void main(String[] args){
Ticket t1 = new Ticket();
Thread thread = new Thread(t1);
thread.start();
}
}
(4)线程的状态
(5)多线程的应用:售票的例子
class Ticket extends Thread{
private static int num=100;
public void run(){
while(true){
if(num>0){
System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
}else{
break;
}
}
}
}
public class SellTicket {
public static void main(String[] args){
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}