java多线程学习(一)

来源:互联网 发布:windows哪个系统好用 编辑:程序博客网 时间:2024/06/11 21:18

进程与线程

进程:就是应用程序在内存中的分配的空间(正在运行中的程序)
线程:是进程中负责程序执行的执行单元。也称为执行路径。
多线程技术:解决多部分代码同时执行的需求,合理的使用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();    }}

同步问题

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

原创粉丝点击