java如何创建一个线程共享的对象?

多线程怎么使用同一个对象呢?
除了static,还有什么办法呢?

本人入行不久,基础不太扎实,还请细讲

图片说明
java提供了一个稍弱的同步机制,用volidate修饰变量,此时变量具备了可见性,当线程读取该变量时,他会从内存中去读取,不会再读取工作内存中的变量副本。修改该变量时也会更新内存中该变量的值。
但是,volidate修饰的变量,是无法保证变量的同步性的。

不变的常量可以设置成static,但如果涉及到多线程的时候,每个线程一般在使用的时候单独创建对象,不建议共享,否则可能出现脏读

使用volatile关键字来解决变量在多个线程之间 "可见",而synchronized关键字来保证多个线程之间 "同步"

不变的常量可以设置成static,但如果涉及到多线程的时候,
每个线程一般在使用的时候单独创建对象,不建议共享,
否则可能出现脏读

用sys忘记怎么样拼写了你学习一下

创建线程的第一种方式:
创建一个类继承Thread
重写Thread中的run方法 (创建线程是为了执行任务 任务代码必须有存储位置,run方法就是任务代码的存储位置。)
创建子类对象,其实就是在创建线程
启动线程start()
这种方式的特点(缺陷):线程任务和线程是绑定在一起的。

为了解决四个线程共享票的问题,需要使用创建线程的第二种方式:
创建实现了Runnable接口的子类
重写Runnable接口中的run方法
创建实现了Runnable接口的子类的对象
创建Thread类的对象,也就是在创建线程
把实现了Runnable接口的子类对象作为参数传递给Thread类的构造方法
这种方式的特点是:把线程任务进行了描述,也就是面向对象,从而实现了线程任务和线程对象的分离。线程执行什么任务不再重要,只要是实现了Runnable接口的子类对象都可以作为参数传递给Thread的构造方法,此方式较为灵活。

尽量用原子性的对象声明变量,例如:

 public class Test {
    public  AtomicInteger inc = new AtomicInteger();

    public  void increase() {
        inc.getAndIncrement();
    }

    public static void main(String[] args) {
        final Test test = new Test();
        for(int i=0;i<10;i++){
            new Thread(){
                public void run() {
                    for(int j=0;j<1000;j++)
                        test.increase();
                };
            }.start();
        }

        while(Thread.activeCount()>1)  //保证前面的线程都执行完
            Thread.yield();
        System.out.println(test.inc);
    }
}

我发现你们扯远了啊。楼主没问线程安全的问题,是问这么共享这个变量,就一个能不能访问的问题。
我给你说一个最基础的。你在new 一个线程的时候,把这个变量的引用传给这个线程的构造器不就完事了吗

如果只要求变量共享的话,我建议使用volitale。