1.线程之创建
线程的创建有3中,继承Thread,实现Runnable接口,实现Callable接口(了解)
一,继承Thread
1.创建多线程:继承Thread 重写run() 线程体
2.使用多线程:创建子类对象,调用对象.start() 启动线程(加入到线程组,有CPU自己管控)
缺点:单继承
本身存在的线程有 main() gc 异常
代码实现:
package com.cust.create;
/**
*
* 描述:
* 1.创建多线程:继承Thread 重写run() 线程体
* 2.使用多线程:创建子类对象,调用对象.start()
* 启动线程(加入到线程组,有CPU自己管控)
* @author cookie
*/
public class Rabbit extends Thread {
@Override
public void run() {
for(int i = 0; i < 1000; i++){
System.out.println("rabit---->"+i);
}
}
public static void main(String[] args) {
Rabbit rab = new Rabbit();
Tor tor = new Tor();
rab.start();
tor.start();
for(int i = 0; i < 1000; i++){
System.out.println("main---->"+i);
}
}
}
class Tor extends Thread {
@Override
public void run() {
for(int i = 0; i < 1000; i++){
System.out.println("tor---->"+i);
}
}
}
二,使用Runnbale接口实现多线程
静态代理
1,真实角色
2,代理角色 + 持有真实角色的引用
3,实现相同的接口
优点:1,避免单继承 2,共享资源
1,纯静态代理例子:
package com.cust.create;
/**
*
* 描述:静态代理
* 1,真实角色
* 2,代理角色
* 3,实现相同的接口
*
* @author cookie
*/
public class StaticProxy {
public static void main(String[] args) {
//创建真实角色
Marry you = new You();
//创建代理角色 + 持有真实角色引用
WeddingCompany wc = new WeddingCompany(you);
wc.marry();
}
}
interface Marry {
void marry();
}
//真实角色
class You implements Marry{
@Override
public void marry() {
System.out.println("you and ddd 结婚了....");
}
}
//婚庆公司---> 代理角色
class WeddingCompany implements Marry{
You you; // 持有真实角色的引用
public WeddingCompany() {
}
@Override
public void marry() {
you.marry();
}
public WeddingCompany(Marry you) {
this.you = (You) you;
}
}
2.多线程实现Runnable实例
package com.cust.create;
/**
*
* 描述:真实角色
* @author cookie
*/
public class Proceduer implements Runnable {
@Override
public void run() {
System.out.println("proceduer 敲代码....");
}
public static void main(String[] args) {
//创建真实角色
Proceduer pro = new Proceduer();
//创建代理角色 + 持有真实角色的引用
Thread t = new Thread(pro);
//调用start()方法
t.start();
}
}
3.资源共享实例:
package com.cust.create;
/**
*
* 描述:Runnable优点:1,避免单继承 2,共享资源
* 共享资源实例 ---->12306抢票
* @author cookie
*/
public class Web12306 implements Runnable {
int num = 50;
@Override
public void run() {
while(true){
System.out.println(Thread.currentThread().getName()
+"抢到了第张"+ num-- +"票");
if(num <=0){
break;//线程结束
}
}
}
public static void main(String[] args) {
Web12306 w = new Web12306();
Thread t1 = new Thread(w,"路人甲");
Thread t2 = new Thread(w,"黄牛乙");
Thread t3 = new Thread(w,"攻城狮");
t1.start();
t2.start();
t3.start();
}
}
三、实现Callable接口
优点:可以有返回值,异常可以向外抛出

浙公网安备 33010602011771号