Concurrent, non-synchronized, lazy initialization: is this correct?

Guys, I would appreciate a sanity check on some code of mine.
I have a class, call it State. Every instance is associated with a key of some type. Each user will know the key it wants to use. It will present that key to State to request the corresponding State instance. They must always receive back that sole instance that corresponds to key. The keys are unknown until runtime, so you must lazy initialize a State instance when first presented with a given key.
If concurrency was not an issue, then State could have lazy initialization code like this:
     /** Contract: never contains null values. */
     private static final Map<Object,State> map = new HashMap<Object,State>();
     public static State get(Object key) {
          State state = map.get(key);
          if (state == null) {
               state = new State();
               map.put(key, state);
          return state;
     private State() {}     // CRITICAL: private to ensure that get is the only place instances createdBut heavy concurrency on get is present in my application. While I could trivially make the above code safe by synchronizing get, that would cause it bottleneck the entire application. Vastly superior would be the use of some sort of concurrent data structure that would only bottleneck during the relatively rare times when new State instances must be created, but would allow fast concurrent retrievals when the State instance has already been created, which is the vast majority of the time.
I think that the unsynchronized code below does the trick:
     /** Contract: never contains null values. */
     private static final ConcurrentMap<Object,State> map = new ConcurrentHashMap<Object,State>();
     public static State get(Object key) {
          State current = map.get(key);
          if (current != null) return current;
          State candidate = new State();
          current = map.putIfAbsent(key, candidate);
          return (current == null) ? candidate : current;
     }Here is how it works: most of the time, just the first two lines
     /** (ignore this) */
     State current = map.get(key);
     if (current != null) return current;will be executed because the mapping will exist. This will be really fast, because ConcurrentHashMap is really fast (its always slower than HashMap, but maybe only 2X slower for the scenario that I will use it in; see [https://www.ibm.com/developerworks/java/library/j-benchmark2/#dsat] ).
If the relevant State instance is not present in map, then we speculatively create it. Because get is unsynchronized, this may/may not be the one actully put on map and returned by the subsequent lines of code because another thread supplying the same key may be concurrently executing the same lines of code. That's why its named candidate.
Next--and this is the real critical step--use ConcurrentMap's atomic putIfAbsent method to ensure that just the first thread to call the method for a given key is the one who suceeds in putting it's candidate in map. We reassign current to the result of putIfAbsent. Its value will be null only if there was no previous mapping for key but this call to putIfAbsent suceeded in putting candidate on map; thus, candidate needs to be returned in this case. But if current is not null, then some other thread with the same key must have been concurrently calling this code and was the thread which suceeded in putting its State on map; thus in this case current will have that other thread's value and so return it (with this thread's candidate being a waste; oh well).
Note that this problem is similar in spirit to the infamous double checked locking idiom. Since that is such a treacherous minefield
[http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html].
I would really appreciate another set of eyes looking over my code.

Hi Bbatman,
Thank you so much for your answer.
Pietblock: I believe that your double checked locking proposal is still wrong.OK, I do believe you.
Did you read the link that I provided in my initial post?
It discusses some known solutions,
the best of which for singletons is a value helper class,
followed by making the reference to your singleton be volatile
(assuming that you are using jdk 1.5+).Yes, I did read that article some time ago, when I first got warned for double checking. I never quite understood the keyword "volatile". Now, when reading it again, I see some light glimmering.
But your proposal has some strange elements.
First, both the singleton field as well as accessor method are always static
--why did you make them instance based in your code?
In order to call them, you already need an instance which defeats the purpose!
Are you sure about that choice?Yes, that is deliberately. The intended use is to define a static instance of SingletonReference in a class that needs to be instantiated as a singleton. That reference is then used to obtain the singleton.
Assuming that leaving out static on those was a typo,
the only innovation in your proposal is the claim that
"Executing an instance method on the new singleton prevents inlining".
Where did you get that idea from?
Its news to me. Instance methods often get inlined, not just static methods.The non static field is not a typo, but intentional. What you call a "innovation", my assumption that I prevented inlining, is exactly what I was not very sure about. I can't imagine how an interpreter or JIT compiler would navigate around that construct, but nevertheless, I am not sure. Your remark suggests that it is unsafe and I will reconsider my code (change it).
The reason why most double checked locking solutions fail,
including I believe yours,
is due to completely unintuitive behavior of optimizing java runtime compilers;
things can happen in different time order than you expect if you do not use some sort of locking.
Specifically, typical double checked locking fails because there is no lock on the singleton,
which means that writes to it can occur in strange order,
which means that your null-check on it may not prevent multiple instances from being created. Yes, you convinced me.
Thank you so much for looking into it
Piet

Similar Messages

  • Problem with lazy initialization in inhereted class

    Hi. I have a strange problem. I have 2 classes CMRCommandInputPanel (view ) , class CommandInputFieldsModel (view's model) and 2 classes that inherets from them: CMRDerivitiveCommandInputPanel and DerivativeCommandInputFieldsModel.
    the Views looks like:
    public class FormPanel extends JPanel {
        protected AbstractFormDataModel mFormModel = null;
        public FormPanel(AbstractFormDataModel formModel) {
            super();
            initialize(formModel);
        private void initialize(AbstractFormDataModel formModel) {
            mFormModel = formModel;
    public class CMRCommandInputPanel extends FormPanel {
         public CMRCommandInputPanel(AbstractFormDataModel formModel) {
              super(formModel);
              initialize();
         private void initialize() {
              initLocalModels();
            JPanel mainPanel =  new JPanel () ;
             mainPanel.setLayout(new BorderLayout());
            mainPanel.add(getUpperButtonsPanel(), BorderLayout.NORTH);
            mainPanel.add(getFormPanel(), BorderLayout.CENTER);
            mainPanel.add(getDownButtonsPanelDefault(), BorderLayout.SOUTH);
            mainPanel.addMouseListener(new MouseAdapter(){
                public void mouseClicked(MouseEvent e) {
                     // set focus on the formPanel in order to set the entered value on mouse click.
                        getFormPanel().requestFocus();
            this.setLayout(new BorderLayout());
            this.add(mainPanel);
            this.setBorder(UIConstants.DEFAULT_PANEL_BORDER);
         protected CMRPanel getFormPanel() {
              if (mFormPanel == null) {
                    adding editable TextFields to the panel.
             return mFormPanel;
         protected void initLocalModels(){
              new CommandInputFieldsModel(mFormModel,this);
    public class CMRDerivitiveCommandInputPanel extends CMRCommandInputPanel {
         private JTitledTextField mRealizationPriceField = null;
         public CMRDerivitiveCommandInputPanel(AbstractFormDataModel formModel) {
              super(formModel);
    // override of  super method
         protected CMRPanel getFormPanel() {
              if (mFormPanel == null) {
                    adding super classes  editable TextFields to the panel and some new ones
              return mFormPanel;
         /* (non-Javadoc)
          * @see cmr.client.ui.CMRCommandInputPanel#initLocalModels()
         protected void initLocalModels() {
              new DerivativeCommandInputFieldsModel(mFormModel,this);
         public JTextField getRealizationDateField() {
              if (mRealizationDateField == null) {
                   mRealizationDateField = new JTextField();
              return mRealizationDateField;
    public class CommandInputFieldsModel extends AbstractFieldsDataModel {
         protected CMRCommonDataModel mFormModel = null;
         protected CMRCommandInputPanel mView = null;
         public CommandInputFieldsModel(CMRCommonDataModel data,CMRCommandInputPanel aView){
              mFormModel = data;
              mView = aView;
              mFormModel.registryModel(this,ExBaseDataController.META_KEY);
              mFormModel.registryModel(this,CompanyMessagesController.META_KEY);
              mFormModel.registryModel(this,DefaultFinancialValueController.META_KEY);
              mFormModel.registryModel(this,QuantityValueController.META_KEY);
              mFormModel.registryModel(this,RateForPercentController.META_KEY);
         /* (non-Javadoc)
          * @see cmr.client.ui.data.CMRUpdatable#updateData(java.lang.Object)
         public void updateData(Object aNewData) {
                updating relevant fields by using getters of View
    public class DerivativeCommandInputFieldsModel extends CommandInputFieldsModel {
         public DerivativeCommandInputFieldsModel(CMRCommonDataModel data,CMRDerivitiveCommandInputPanel aView){
              super(data,aView);
         /* (non-Javadoc)
          * @see cmr.client.ui.data.CMRUpdatable#updateData(java.lang.Object)
         public void updateData(Object aNewData) {
              if (aNewData instanceof RealizationData){
                   RealizationData realizationData =  (RealizationData)aNewData;
                   CMRDerivitiveCommandInputPanel theView = (CMRDerivitiveCommandInputPanel)mView;
                   theView.getRealizationDateField().setValue(realizationData.getRealizationDate());
                   theView.getRealizationPriceField().setValue(realizationData.getRealizationPrice());
              }else
                   super.updateData(aNewData);
    }The problem is , that when the field's getter of inhereted view's class is called from model for updating field,the fields are beeing initialized for second time. they simply somehow are equal to NULL again. I've checked reference to the view and it's the same,but only new fields still equals to NULL from model.
    is someone can help me with that?

    The only thing that springs to mind is that you're
    exporting the newly created fields model object in
    the superclass constructor (at least I assume that's
    what the registry calls do).
    That can cause problems, especially in a
    multi-threaded environment (though it's often
    tempting). Again there's a risk that the
    partly-initialized object may be used.
    Actually this is a bit of a weakness of Java as
    opposed to C++. In C++ a new object has the virtual
    method table set to the superclass VMT during
    superclass initialisation. In Java it acquires its
    ultimate class indentity immediately.
    You'd be safer to extract all that kind of stuff from
    the superclass constructor and have some kind of
    init() method called after the object was
    constructed.
    In fact whenever you see a new whose result
    you don't do anything with, then you should take it
    as a warning.thank you for your replies. ;) I've managed to solve this matter. Simply fully redefined my panel with fields in child-class and added to it's constructor local initialization() method as well, which creates UI of child-class. Even that I initialize UI twice, but all fields are initialized with "lazy initialization" , so there is only once NEW will be called. but there is something weird going in constructors with ovverwritten methods.

  • Lazy Initialization Exceptions

    Our Java naturally classes contain properties which are
    relationships to other classes - either one to many or many to one.
    Due to the fact that these relationships are so intertwined, many
    given objects end up referencing a large portion of the database if
    one were to recursively follow all of the nested relationships. As
    such, we desire to have the option of not loading certain
    relationships when the data is not needed.
    We use EJB 3.0 (JBoss implementation using Hibernate) for
    object persistence. It allows the option of uninitialized
    collections and other referenced objects.
    The Flex process of serialization to AMF causes serious
    problems for this design. It tries to touch all of these properties
    while building the binary representation for sending over the wire.
    This triggers an immediate attempt to initialize the objects which
    are still in the uninitialized state.
    This causes the LazyInitializationException to be thrown by
    the O/R framework - because the transaction is already closed
    (which effectively means the call to the DAO has returned).
    The community only offers two suggestions, both which do not
    work with Flex (or Flash Remoting for that matter). T
    he first is simply initializing everything ahead of time.
    This does not work because eventually you have to draw the line
    somewhere, and the Flex serialization routines will find that line
    and try to cross it.
    The second is the open session in view pattern, meaning that
    we open the transaction as soon as the Flex client makes a request,
    and close it only when the last response has been made. This does
    not work either, because Flex would end up initializing everything
    during serialization.
    I have gone to the extent to writing a custom aspect to
    intercept returning calls from my DAO and null out the Hibernate
    proxies. This worked until I tried to use it for uninitialized many
    to one relationships. Nulling them out actually deletes my
    relationship in the database!
    The only solution I see is to add intelligence to the Flex
    serialization techniques which watch for this scenario, and avoid
    triggering the lazy initialization.
    Any suggestions would be appreciated.

    quote:
    Originally posted by:
    busitech
    Our Java naturally classes contain properties which are
    relationships to other classes - either one to many or many to one.
    Due to the fact that these relationships are so intertwined, many
    given objects end up referencing a large portion of the database if
    one were to recursively follow all of the nested relationships. As
    such, we desire to have the option of not loading certain
    relationships when the data is not needed.
    We use EJB 3.0 (JBoss implementation using Hibernate) for
    object persistence. It allows the option of uninitialized
    collections and other referenced objects.
    The Flex process of serialization to AMF causes serious
    problems for this design. It tries to touch all of these properties
    while building the binary representation for sending over the wire.
    This triggers an immediate attempt to initialize the objects which
    are still in the uninitialized state.
    This causes the LazyInitializationException to be thrown by
    the O/R framework - because the transaction is already closed
    (which effectively means the call to the DAO has returned).
    The community only offers two suggestions, both which do not
    work with Flex (or Flash Remoting for that matter). T
    he first is simply initializing everything ahead of time.
    This does not work because eventually you have to draw the line
    somewhere, and the Flex serialization routines will find that line
    and try to cross it.
    The second is the open session in view pattern, meaning that
    we open the transaction as soon as the Flex client makes a request,
    and close it only when the last response has been made. This does
    not work either, because Flex would end up initializing everything
    during serialization.
    I have gone to the extent to writing a custom aspect to
    intercept returning calls from my DAO and null out the Hibernate
    proxies. This worked until I tried to use it for uninitialized many
    to one relationships. Nulling them out actually deletes my
    relationship in the database!
    The only solution I see is to add intelligence to the Flex
    serialization techniques which watch for this scenario, and avoid
    triggering the lazy initialization.
    Any suggestions would be appreciated.

  • [svn:bz-trunk] 12951: Changed synchronized PropertyProxyRegistry#getRegistry method to non-synchronized to avoid threads blocking in message push .

    Revision: 12951
    Revision: 12951
    Author:   [email protected]
    Date:     2009-12-15 02:17:31 -0800 (Tue, 15 Dec 2009)
    Log Message:
    Changed synchronized PropertyProxyRegistry#getRegistry method to non-synchronized to avoid threads blocking in message push.
    Checkintests: Pass with the usual 3-4 tests that time out with and without this change.
    QA: Yes
    Doc: No
    Modified Paths:
        blazeds/trunk/modules/core/src/flex/messaging/io/PropertyProxyRegistry.java

    Revision: 12951
    Revision: 12951
    Author:   [email protected]
    Date:     2009-12-15 02:17:31 -0800 (Tue, 15 Dec 2009)
    Log Message:
    Changed synchronized PropertyProxyRegistry#getRegistry method to non-synchronized to avoid threads blocking in message push.
    Checkintests: Pass with the usual 3-4 tests that time out with and without this change.
    QA: Yes
    Doc: No
    Modified Paths:
        blazeds/trunk/modules/core/src/flex/messaging/io/PropertyProxyRegistry.java

  • No concurrent manager is defined to process this request,so it can't be pro

    Hello Friends
    I am facing a serious problem in my production server. After Stop/Start my application I have to run cmclean.sql to active "Output Post Processing" concurrent manager.
    I have find out that when I down my application FNDLIBR does not down properly. I have put sleep time 10 minutes and I also wait 5 hours to check is it down or not but After 5 hours the process still running. To down the process I have to execute kill -9 <process id>.
    Please see the below Diagnostic message or Shutdown concurrent manger.
    No concurrent manager is defined to process this request, so it cannot be processed.
    Contact your system administrator to define a concurrent manager to process this request or to verify that existing concurrent managers have the correct specialization rules.
    This request may have to wait on one or more of the following requests to complete before it can begin execution:
    Application Version - 12.0.6
    OS - Redhat Linux (x86)
    Thanks
    Makshud

    Hi,
    No concurrent manager is defined to process this request, so it cannot be processed. See if (Note: 342932.1 - No Concurrent Manager is Defined to Process This Request on Shutdown of Managers) helps.
    Regards,
    Hussein

  • Con. Req. 'Receiving Transaction Manager' Inactive/No Manager : This request is an unconstrained request. (queue_method_code = I) , No concurrent manager is defined to process this request, so it cannot be processed.

    Hi Gurus,
    I need your help on a concurrent request ( Receiving Transaction Manager ) showing as Inactive/No Manager.
    EBS: R12.1.2 on Linux
    Database: 11.2.0.3 on HP UX Itanium
    A user is submitting the concurrent request - "Receiving Transaction Manager" (It is a concurrent program not a concurrent manager).  The request ends up as Inactive/No Manager. When I click on the diagnostics button this is what it shows -
    "No concurrent manager is defined to process this request, so it cannot be processed.
    Contact your system administrator to define a concurrent manager to process this request or to verify that existing concurrent managers have the correct specialization rules."
    I ran analyzereq.sql and the analysis is
    Analysis:
    Request 1427025 is in phase "Pending" with status " Normal".
                               (phase_code = P)   (status_code = I)
    This request is an unconstrained request. (queue_method_code = I)
    It is in a "Pending/Normal" status, ready
    to be run by the next available manager.
    Checking managers available to run this request...
    There is no manager defined that can run this request
    This should show on the form as Inactive/No Manager
    Check the specialization rules for each
    manager to make sure they are defined correctly.
    Additional information (from apps.FND_CONC.DIAGNOSE):
    No concurrent manager is defined to process this request, so it cannot be processed.
    Contact your system administrator to define a concurrent manager to process this  request or to verify that existing concurrent managers have the correct specialization rules.
    I ran another SQL to find out which manager runs the program :
    select CONTROLLING_MANAGER,request_id
    from fnd_concurrent_requests
    where request_id=1427025;
    It returned blank (or) NULL for controlling Manager.
    select b.USER_CONCURRENT_QUEUE_NAME from fnd_concurrent_processes a,
    fnd_concurrent_queues_vl b, fnd_concurrent_requests c
    where  a.CONCURRENT_QUEUE_ID = b.CONCURRENT_QUEUE_ID
    and    a.CONCURRENT_PROCESS_ID = c.controlling_manager
    and    c.request_id = 1427025;
    Returned Nothing.
    I thought that for a concurrent program when no specific manager is defined, Standard Manager is the default. Is my understanding wrong ?? Have anyone of you faced this issue? How did you fix it ?
    I did check the profile - Concurrent: Conflict Domain for the responsibility and it is blank.
    Appreciate any help.
    Thanks
    Cherrish Vaidiyan

    Was this working before? If yes, any changes been done recently?
    Your understanding is correct, unless this concurrent program is excluded from being processed by standard manager.
    If the request was not processed then the no rows output is an expected behavior -- (Doc ID 344011.1)
    Have you tried the solution in (Doc ID 1303315.1)?
    Thanks,
    Hussein

  • Is this correct

    public class a implements b
    static class c
    Object data ;
    Node next;
    public c ()
    data = 0;
    next = null;
    public c (Object o, Node n)
    data = o;
    next = n;
    I have an interface b,inthat add(),addFirst(),addIndex() like somany methods.Do not use any of the collection classes in java.util-- you are to implement this data structure yourself.class a contains a non-public, static nested class named Node to implement its linked list. You should always enforce invariants with assertions. I am following correct way or not.The iterator( ) method returns an object whose type implements the java.util.Iterator interface for sequence traversal using an inner class

    Apparently not, since you don't seem to be enforcing invariants with assertions as the homework assignment said.
    Some advice:
    People will help you with your homework on these forums, but you'll get a better response if you're honest and say up front that you're doing homework. And put some more work into it. Just running quotes from your assignment in with some handwaving about the details and a vague question like "is this correct" into a single paragraph will ingratiate you to no one.
    And when you post code, wrap it in [code][/code] tags so it's legible.

  • I just upgraded to Safari 5.1; now none of my mice will work correctly

    I just upgraded to Safari 5.1; now none of my mice will work correctly on flash intensive websites (Evony); have reinstalled the latest version of flash, have emptied caches, have reset the first 7 items in the reset list, dumped preferences and restarted.  Nothing works.  And, to boot, 1Password no longer works.  How can in reinstall the former version of Safari that I was not quite so happy with but at least things worked? 
    I am now going to have to use Firefox for the majority of my Internet time.  PLEASE, can someone help me?

    Ok, I kept on looking and back in 2009, a fellow had a similar problem with his iPod.  He went to network settings., reset network settings to factory defaults, just like the apple guy told him... and it didn't fix it or so he thought....so he deleted an app from his phone that he had purchased to force it to place it back on when he used iTunes to resink his iSink or whatever.  Anyhow his app then worked!  He clicked on each of his other apps and Voila!!  they all started working again.  I did the above and it worked for me. 
    Who knows which step fixed it ... the reset of the network settings or the deletion of a single app to force the re-sync from iTunes.  Guess it doesn't really matter...
    I sure hope this helps someone out there with a similar problem and maybe they won't have to waste as much time on it as I did!

  • FF6 wont connect to websites. Shows 'connecting...'or green circle going round. Loads some or none of page. remains like this indefinitely. Have removed & re-entered FF in Norton360 f/wall & uninstalled then downloaded FF6 again to no avail. IE/Chrome OK

    FF6 wont connect to websites. Shows 'connecting...'or green circle going round. Loads some or none of page. remains like this indefinitely.
    Have removed & re-entered FF in Norton360 f/wall & uninstalled then downloaded FF6 again to no avail. IE/Chrome OK

    Just an update... A rep contacted me and we did a screen share. They were convinced that I wasn't full of <insert proper word here>. They promised to get back to me in a few days, and now? A few months later? Nothing.
    Still no files. Still no correction... Still no nothing from Adobe.
    The person I spoke to was kind, saying he'd make sure I got CC for free for a while...
    Still though, no follow up.
    Adobe, are you going to correct this or just let your customer suffer at your mistakes?

  • I want to install hybrid drive in Macbook pro. I bought my Mac book with lion and am now running mountain lion. I was told I needed install disk to set up new drive before restoring from my time capsule.Is this correct and if so how do I get disk osx10?

    I purchased a Mac book Pro in Aug 2012 with lion and have upgraded to mountain lion. I currently am looking to install the segate 750 gig hybrid drive. I watching video I shows me needing a OSX 10 disk to boot off of when the new disk is in and the use time capsule to restore system from back up drive to new hybrid. Hope I got this correct so far. that being said my Mac Book did not come with a disk therefore is one available, when I get to point of restoring from back up with it be the same mountain lion system I had. Sorr if this sounds redudant.. Thank you in advance

    Connect the new hybrid drive to your MBP.  Start up your MBP holding the OPTION key, the two HDD icons will appear.  Select the 'restore' icon on the right.  When you get to the menu where you have 4 options, select Disk Utility.  Format the drive and then you can use the option of restoring it from Time Machine.
    Ciao.

  • First off, i think it's sad that i have to use my non apple device to post this question... Why has my iPad become absolutely useless after updating to iOS 8.1? I am unable to use my mini because it crashes, slow performance, major battery drain.

    First off, i think it's sad that i have to use my non apple device to post this question... Why has my iPad become absolutely useless after updating to iOS 8.1? I am unable to use my mini because it crashes, slow performance, major battery drain.

    Restore iPad to Factory Default; do not restore from backup. It may be the cause of the problem.
    Settings>General>Reset>Erase all content and settings

  • My yahoo e-mail not pushing to iPhone4, again.  Had this same problem in October for several weeks.  My kids and husband have 3 other types of smart phones, and none of them are experiencing this problems.  This has been going on for 2 weeks so far.

    My yahoo e-mail is not pushing to my iPhone4, again.  Had this same problem for several weeks in October/November 2011.  It's been a problem again for two weeks now.  My kids and husband have three other types of smart phones, and none of them have had this problem.  I'm NOT impressed.  I've seen that others in the iPhone community have also been having this problem.  Is Apple doing anything about it?

    Read this: https://discussions.apple.com/message/17333604#17333604
    It's a yahoo issue. Nothing you can do on your phone to fix it.

  • I purchased photoshop elements 8 on line in 2010. I recently switched to a new desktop computer. Photoshop asked for my serial number. I entered the correct serial number (obtained from Adobe). It says it is invalid. How do I get this corrected so I can u

    I purchased photoshop elements 8 on line in 2010. I recently switched to a new desktop computer. Photoshop asked for my serial number. I entered the correct serial number (obtained from Adobe). It says it is invalid. How do I get this corrected so I can use the product I purchased?

    Hi Rosera,
    This is bad and I am sorry to hear that you are running into these issues.
    Let me connect with you, so right now, the current state is that you have installed copy of PSE 8 in trial on your windows 7 machine, and when you are trying to enter the serial number from your PSE 8 Box, it is saying the serial number to be invalid?
    It might sound pretty obvious, but please make sure that you are entering the serial number correctly and of PSE 8(in case you bought a PEPE box)?
    Have you tried the steps mentioned below by Barbara?
    If possible, you can send me the serial number through PRIVATE MESSAGE and I can check it on my end that whether the serial number is indeed invalid or that the issue is with your machine?
    Regards,
    Ankush

  • I erased my 2nd gen ipod touch, can it be restored, apple shop are saying no , some parts can not be downloaded. is this correct

    Sorry new to all this.
    I was re-selling my ipod touch 2nd generation so i erased all contents and setting ... was this correct ?
    The new owner is telling me she cant get it to work. she has taken it into the apple store and they have told her that parts that were erased ca no longer be downloaded.
    Is this correct ?
    Have i been an idiot ? lol

    That sounds correct.
    Many developers when they updated their apps to support iOS 5 and 6 dropped compatibility for iOS 4.2.1 and earlier.
    See the following for more easily  finding compatible apps
    iOSSearch - search the iTunes store for compatible apps.
    Vintapps 3.1.3 - paid app.
    Apple Club - filter apps by iOS version.

  • I'm using a 15" Macbook Pro running OSX6.8 and cannot upgrade. I have a subscription to Adobe CC but none of these work on this so I was on with Adobe for 5 hours trying to install and launch Illustrator, InDesign, Photoshop, Muse, and Acrobat Pro from CS

    I'm using a 15" Macbook Pro running OSX6.8 and cannot upgrade. I have a subscription to Adobe CC but none of these work on this so I was on with Adobe for 5 hours trying to install and launch Illustrator, InDesign, Photoshop, Muse, and Acrobat Pro from CS6. Well, InDesign is the only one that works and I have a ton of work due! I don't have a serial number for Photoshop or Illustrator except for CS3, and they don't work. InDesign gave me no problems. Illustrator says it can't work on this machine. Photoshop needs a serial number. I'm stumped and getting anxious and freaked out. Can anyone help? Adobe Chat is down right now.

    if you have a cc subscription, close ps > sign out and then back in to your cc desktop > open ps.
    ai cs6 requires:
    Multicore Intel processor with 64-bit support
    Mac OS X v10.6.8 or v10.7. Adobe Creative Suite 5, CS5.5, and CS6 applications support Mac OS X v10.8 and v10.9 when installed on Intel-based systems.*
    2 GB of RAM (8 GB recommended)
    2 GB of available hard-disk space for installation; additional free space required during installation (cannot install on a volume that uses a case-sensitive file system or on removable flash storage devices)
    1024 x 768 display (1280 x 800 recommended) with 16-bit video card

Maybe you are looking for

  • Ken Burns Effect in iDVD without iPhoto?

    I was wondering if I can add the Ken Burns Effect in iDVD without having to make a slideshow in iPhoto and exporting.

  • How to add a custom button?

    Hello Gurus, I'm very new to FPM and I got a question regarding to adding a custom button in portal. I have read some documents but couldnt figure it out. Can somebody please clarify the issue? Thanks in advance. Ferhat Edited by: iltern on Feb 29, 2

  • One SQL Statement

    I have a text column with values like listed below: rec_num text_column 10001 'Today_is__my_birthday.' 10002 'I have__a___dog_and_a____cat.' where '_' indicates space. How can I use one SQL 'select ....' statement to get rid of the multiple spaces an

  • How can I create this special frame/shadow in Photoshop Elements? (see picture)

    Hi there, I'm completely new with Photoshop Elements and want to create a certain shadowed frame for some website pictures... can you tell me if there's a ceratin technique, plugin or other freeware (mac) which lets me act this way? The frame/shadow

  • Photoshop can't open -1712

    I get this error when trying to open PS (it has worked just days before): "Photoshop can't open -1712" Why? How do I remedy this?