java学习笔记
进程:正在运行的程序,一个应用程序再内存中的在执行区域。
线程:进程中的一个执行控制单元,执行路径
一个进程可以又一个线程,也可以有多个线程。
单线程:安全性高,效率低。
多线程:安全性低,效率高。
多线程案例:360,讯雷等。
多线程的实现方式:thread类
cpu执行程序的随机性
线程类:
package test4;
public class test4_2 extends Thread{
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
}
执行线程类:
package test4;
public class test4_3 {
public static void main(String[] args) {
//创建线程实例
Thread mt=new test4_2();
mt.setName("张三");
//启动
mt.start();
Thread mt2=new test4_2();
mt2.setName("张四");
//启动
mt2.start();
}
}
第二种方式
package test4;
public class mythread2 implements Runnable {
public void run() {
for (int i = 0; i < 100; i++) {
Thread t=Thread.currentThread();
System.out.println(t.getName()+":"+i);
}
}
}
package test4;
public class threaddemo {
public static void main(String[] args) {
mythread2 mt=new mythread2();
Thread t=new Thread(mt);
t.setName("李四");
t.start();
mythread2 mt2=new mythread2();
Thread t2=new Thread(mt2);
t2.setName("李1");
t2.start();
}
}
模拟火车站售票
同步:安全性高,效率低
非同步:安全性低,效率高。
synchronized (mutex) {}同步代码块
或者方法用synchronized修饰,再void之前。
非静态同步方法的锁对象是this。
静态方法随着类的加载而加载,没有this,是当前对象的字节码对象。
同不方法:使用synchronized修饰的方法,一旦被一个线程访问,则全部锁死,其他线程无法访问。
package test4;
public class ticketthread implements Runnable {
int tickets=100;
Object obj=new Object();
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
synchronized (obj) {
if(tickets>0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+tickets--);}
}
}
}
}
package test4;
public class tickettest {
public static void main(String[] args) {
ticketthread tt=new ticketthread();
Thread t1=new Thread(tt);
t1.setName("A : ");
Thread t2=new Thread(tt);
t2.setName("B : ");
Thread t3=new Thread(tt);
t3.setName("C : ");
t1.start();
t2.start();
t3.start();
}
}
线程的生命周期:
生命周期:一个对象的生老病死。
新建,创建线程对象—》就绪,具备了执行条件,没有具备执行权利—》(等待 wait(),notify() )—》运行,具备了执行条件,具备了执行权利—》死亡,线程对象变成了垃圾。