java多线程学习(一)

进程与线程

进程:就是应用程序在内存中的分配的空间(正在运行中的程序)
线程:是进程中负责程序执行的执行单元。也称为执行路径。
多线程技术:解决多部分代码同时执行的需求,合理的使用CPU资源。
线程的任务都封装在特定的区域中:
:比如:主线程运行的任务都在定义在main方法中
垃圾回收线程在收垃圾都会运行finalize方法


如何建立一个执行路径?

创建线程的两种方法:
1.继承Thread类
(1.继承thread类
2.覆盖run方法
3.创建子类对象就是创建线程对象

2.实现Runnable接口
(1.定义一个类实现Runnnable
2.覆盖Runnable接口中的run方法,将线程要运行的任务代码存储到方法中
3.通过Thread类创建线程对象,并将实现Runnable接口的对象作为Thread类的构造函数的参数进行传递
4.调用Thread类的start方法,开启线程

例子:

class SaleTicket implements Runnable
{
    private int tickets=100;
    public void run()
    {
        whlie(true)
        {
            if(tickets>0)
            {
                Sysytem.out.println(Thread.currentThread.getName()+"..."+tickets--);
            }
        }
    }
}
class TicketDemo
{
    public static void main(String[] args)
    {   
        SaleTicket t=new SaleTicket();
        //创建4个线程
        Thread t1=new Thread(t);
        Thread t2=new Thread(t);
        Thread t3=new Thread(t);
        Thread t4=new Thread(t);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

创建线程使用第二种比较好

实现Runnable接口的好处:
1.避免了继承Thread类的单继承的局限性
2.Runnable接口出现更符合面向对象,将线程单独进行了封装
3.Runnable接口出现降低了线程对象和线程任务的耦合性

开启线程要用start方法,没有用start方法,执行任务的只有主线程。


多线程的安全问题

产生原因:
1.线程任务中有处理到共享的数据
2.线程任务中有多条对共享数据的操作(一个线程在操作共享数据的过程中,其他线程参与了运算,造成了数据的错误)

解决的思想:
只要保证多条操作共享数据的代码在某一段时间段,被一条线程所执行,在执行期间不允许其他线程参与运算

1.用到同步代码块
synchronize(对象)
{
需要同步的代码
}

class SaleTicket implements Runnable
{
    private int tickets=100;
    Object obj=new Object();
    public void run()
    {
        whlie(true)
        {
            synchronized(obj)
            {
                if(tickets>0)
                {
                                Sysytem.out.println(Thread.currentThread.getName()+"..."+tickets--);
                }
            }
        }
    }
}
class TicketDemo
{
    public static void main(String[] args)
    {   
        SaleTicket t=new SaleTicket();
        //创建4个线程
        Thread t1=new Thread(t);
        Thread t2=new Thread(t);
        Thread t3=new Thread(t);
        Thread t4=new Thread(t);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

同步问题

同步的好处和弊端
好处:解决了多线程的安全问题
弊端:降低效率
同步的前提:多个线程在同步中必须使用同一个锁,这才是对多个线程同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值